我是scrapy的新手但是使用python一段时间了。我从scrapy
文档和xpath
选择器中吸取了教训。现在,我想把知识转化为一个小项目。我试图使用scrapy从工作板job links and the associated info like job title, location, emails (if any), phone numbers (if any)
中删除https://www.germanystartupjobs.com/
。
我有这个入门代码,
import scrapy
class GermanSpider(scrapy.Spider):
# spider name
name = 'germany'
# the first page of the website
start_urls= ['https://www.germanystartupjobs.com/']
print start_urls
def parse(self, response):
pass
def parse_detail(self, response):
pass
并将运行蜘蛛scrapy runspider germany
在parse
函数中,我想在href
函数中获取parse_detail
和详细信息。
当我使用chrome
开发人员工具打开提到的页面并检查列出的作业时,我发现所有作业都在ul
<ul id="job-listing-view" class="job_listings job-listings-table-bordered">
然后,分隔作业列在
的divs
内的许多内容中
<div class="job-info-row-listing-class">
有关联的信息,比如,href
是在<a href="https://www.germanystartupjobs.com/job/foodpanda-berlin-germany-2-sem-manager-mf/">
其他divs
提供divs
的职位,公司名称,位置等,例如
<div>
<h4 class="job-title-class">
SEM Manager (m/f) </h4>
</div>
<div class="job-company-name">
<normal>foodpanda<normal> </normal></normal></div>
</div>
<div class="location">
<div class="job-location-class"><i class="glyphicon glyphicon-map-marker"></i>
Berlin, Germany </div>
</div>
第一步是使用href
功能获取parse
,然后使用parse_details
获取response
内的相关信息。我发现email
和phone
号码仅在您打开href
的链接时提供,但标题和位置是在当前divs
内提供的同一页。
正如我所提到的,我在python中有很好的编程技巧,但是,即使在使用tutorial之后,我也在努力使用xpath
。如何找到链接和相关信息?一些没有解释的示例代码将有很多帮助。
我尝试使用代码
# firstly
for element in response.css("job-info-row-listing-class"):
href = element.xpath('@href').extract()[0]
print href
yield scrapy.Request(href, callback=self.parse_detail)
# secondly
values = response.xpath('//div[@class="job-info-row-listing-class"]//a/text()').extract()
for v in values:
print v
#
values = response.xpath('//ul[@id="job-listing-view"]//div[@class="job-info-row-listing-class"]//a/text()').extract()
使用scrapy runspider germany
答案 0 :(得分:3)
您可能无法轻松提取此网站上的信息,因为实际的工作列表是作为POST请求加载的。
你怎么知道这个?
scrapy shell "https://www.germanystartupjobs.com/"
。 (当你第一次开始搜索网站时,这打开了,你猜对了,shell,这是非常值得推荐的。你可以尝试使用函数,xpath等。)view(response)
。这将打开响应scrapy进入您的默认浏览器。 我们如何找出它的要求? (我使用Firebug for FireFox,不知道它在Chrome上是如何工作的)
Inspect with Firebug
。这会打开Firebug,这与Chrome中的开发者工具基本相似。我更喜欢它。Network
- 标签。如果没有,请重新加载页面。 在这种情况下,对https://www.germanystartupjobs.com/jm-ajax/get_listings/
的请求会返回一个JSON
- 对象(点击JSON
),其中包含HTML代码。
对于您的蜘蛛,这意味着您需要告诉scrapy获取此请求并处理HTML
- JSON
- 对象的一部分,以便能够应用您的xpath。
您可以通过导入蜘蛛顶部的json
- 模块然后执行以下操作来执行此操作:
data = json.loads(response.body)
html = data['html']
selector = scrapy.Selector(text=data['html'], type="html")
例如,如果您要从网站中提取所有网址并关注它们,则需要指定xpath,找到网址的位置并yield
新请求到这个网址。所以基本上你是在告诉scrapy&#34;看,这里是网址,现在去关注它&#34;。
xpath的一个例子是:
url = selector.xpath('//a/@href').extract()
所以括号中的所有内容都是你的xpath。您不需要指定ul[@id="job-listing-view"]/
左右的所有路径,您只需要确保它是可识别的路径。例如,我们只在a
- 标记中包含您想要的网址,网站上没有其他a
标记。
这几乎是基本的东西。
我强烈建议你在shell中玩游戏,直到你感觉到你的xpath为止。拿一个看起来很简单的网站,没有任何请求,看看你是否可以通过xpath找到你想要的任何元素。