Python 如何使用scrapy获取href和相关信息?
我对scrapy还不熟悉,但使用python已经有一段时间了。我从Python 如何使用scrapy获取href和相关信息?,python,xpath,scrapy,Python,Xpath,Scrapy,我对scrapy还不熟悉,但使用python已经有一段时间了。我从scrapy文档以及xpath选择器中吸取了教训。现在,我想把知识做一个小项目。我正试图从工作板上删除工作链接和相关信息,如职位、位置、电子邮件(如果有)、电话号码(如果有)https://www.germanystartupjobs.com/使用刮屑器 我有这个启动码 import scrapy class GermanSpider(scrapy.Spider): # spider name name
scrapy
文档以及xpath
选择器中吸取了教训。现在,我想把知识做一个小项目。我正试图从工作板上删除工作链接和相关信息,如职位、位置、电子邮件(如果有)、电话号码(如果有)
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
并将运行spiderscrapy runspider germany
在parse
函数中,我想获取href
s和parse\u detail
函数中的详细信息
当我用chrome
developer工具打开提到的页面并检查列出的作业时,我看到所有作业都在这个ul
<ul id="job-listing-view" class="job_listings job-listings-table-bordered">
第一步是使用parse
函数获取href
,然后使用响应获取parse_details
中的相关信息。我发现电子邮件
和电话
号码仅在您将从href
s打开链接时提供,但标题和位置在同一页面的当前divs
中提供
正如我所提到的,我在python中有不错的编程技巧,但即使在使用了xpath
s之后,我仍然难以使用它。如何找到链接和相关信息?一些解释很少的示例代码会有很大帮助
我尝试使用代码
# 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
运行spider之后,他们似乎没有返回任何信息,因为实际的工作列表是作为POST请求加载的,因此您可能无法轻松提取此站点上的信息
你怎么知道的
- 类型
scrapy shell“https://www.germanystartupjobs.com/“
在您选择的终端中。(你猜对了,这打开了shell,这是非常值得推荐的,当你第一次开始抓取一个网站的时候。在那里你可以尝试函数,XPath等等。)
- 在shell中,键入
view(response)
。这将打开scrapy在默认浏览器中得到的响应李>
- 当页面加载完毕后,您应该能够看到没有工作列表。这是因为它们是通过POST请求加载的李>
我们如何找出它是什么要求?(我使用FireFox的Firebug,不知道它在Chrome上是如何工作的)
- 启动firebug(例如,右键单击某个元素,然后单击
Inspect with firebug
。这将打开firebug,它本质上与Chrome中的开发人员工具类似。我更喜欢它
- 在这里,您可以单击
网络
-选项卡。如果没有任何内容,请重新加载页面
- 现在,您应该能够看到加载工作列表的请求
在这种情况下,请求https://www.germanystartupjobs.com/jm-ajax/get_listings/
返回一个JSON
-对象(单击JSON
),其中HTML代码是它的一部分
对于spider,这意味着您需要告诉scrapy获取此请求并处理JSON
-对象的HTML
-部分,以便能够应用XPath
您可以通过导入spider顶部的json
-模块,然后导入以下内容:
data = json.loads(response.body)
html = data['html']
selector = scrapy.Selector(text=data['html'], type="html")
例如,如果您想从站点中提取所有url并遵循它们,则需要指定xpath、找到url的位置,并向该url生成一个新请求。因此,基本上您是在告诉scrapy“看,这是url,现在开始遵循它”
xpath的一个示例是:
url = selector.xpath('//a/@href').extract()
因此,括号中的所有内容都是您的xpath。您不需要指定ul[@id=“job listing view”]/
中的所有路径,您只需要确保它是一个可识别的路径。例如,我们只在a
-标记中有您想要的URL,网站上没有其他a
-标记
这几乎是基本的东西
我强烈建议你在外壳中玩,直到你觉得你掌握了XPath的窍门。找一个看起来很简单的网站,不需要任何请求,看看你是否可以通过XPath找到任何你想要的元素。谢谢你的回答,这真的很有帮助。我发布了另一个与scrapy
相关的问题,可能是int为您安装http://stackoverflow.com/questions/41178659/how-to-get-the-job-description-using-scrapy
url = selector.xpath('//a/@href').extract()