我试图从抓取作业配置文件中抓取英国石油公司网站。最初机器人不允许它抓取,但在我初始化ROBOTSTXT_OBEY = False后,它开始工作,但现在它不是抓取整个页面。下面是我的代码:
进口史派瑞类exxonmobilSpider(史派瑞.蜘蛛):这是一个很好的例子,它可以帮助你找到你想要的东西。
def parse(self, response):
name=response.xpath('//h3[@class="Hit_hitTitle__3MFk3"]')
print(name)
print(len(name))[enter image description here][1]
如图所示,xpath给出了h3标记,但是当我运行代码时,得到的是空列表。后来我通过打印所有li或div标记并计算标记总数进行了交叉检查,我发现只有一半或一些标签被刮掉了。任何人都知道为什么Scrapy只刮掉了页面的一部分而不是整个页面。也附上了比较图像。enter image description here您可以看到li标记的总数为55,但现在请检查响应变量“name”的长度。enter image description here
1条答案
按热度按时间kuuvgm7e1#
希望OP在下一个问题中包含一个最小的可重复示例,这里有一种获取这些作业的方法。请记住,作业是通过页面中的Javascript从API中拉取的,因此您需要使用splash/scrapy-playwright,或者直接刮取API。我们将使用后者。API url是从浏览器的开发工具-网络选项卡中获取的。
运行
scrapy crawl bpscrape -o bpdsjobs.json
得到一个包含所有26个作业的json文件。你需要做一些数据清理,因为json的响应非常全面,包含了很多html标签等等。有关Scrapy文档,请参见https://docs.scrapy.org/en/latest/