你好我试图用scrapy刮掉加拿大黄页这是我的蜘蛛代码:
import scrapy
class YellSpider(scrapy.Spider):
name = 'yellspider'
start_urls = ['http://www.yellowpages.ca/search/si/40/dentist/Toronto+ON']
def start_requests(self):
urls = ['http://www.yellowpages.ca/search/si/{0}/dentist/Toronto+ON'.format(x) for x in xrange(1, 51)]
for u in urls:
yield scrapy.Request(url=u, callback=self.parse, dont_filter=True)
def parse(self, response):
for job in response.css(".listing.listing--bottomcta.placement"):
yield {
'name': job.css(".listing__name--link::text").extract_first(),
'street': job.css(".jsMapBubbleAddress:nth-child(1)::text").extract_first(),
'locality': job.css(".jsMapBubbleAddress:nth-child(2)::text").extract_first(),
'postalCode': job.css(".jsMapBubbleAddress:nth-child(4)::text").extract_first(),
'website': job.css(".mlr__item.mlr__item--website a::attr(href)").re(r'\?(.*)'),
'phone': job.css(".mlr__submenu__item h4::text").extract_first(default='no phone number')
}
例如,我知道搜索结果只有50页,所以我确实使用列表理解创建了一个网址列表。 比我使用css选择器来查找我想要抓取的内容。
现在让我们深入研究问题:
一切正常,直到我到达页面[28到50]这就是输出的样子
click here to see the output image
PS :我确实更改了 USER_AGENT 我还添加了 DOWNLOAD_DELAY = 3 并尝试添加 referer 到标题但没有任何效果
还有一点需要注意的是,在scrapy shell中,选择器适用于其余页面[28到50]
答案 0 :(得分:1)
查看第28页或第29页。我对我所做的项目有类似的问题。当我查看那些不起作用的页面时,我注意到这些页面的页面布局不同,我使用的xpath在这些页面上不存在。也许第28-50页的CSS与第1-27页的不同。
答案 1 :(得分:0)
首先你应该导入库:
import re
然后,对于href
的链接,您没有提取.extract()
,而是添加了re
。
要进行调试 - 首先尝试使用href
函数完成extract()
以使其正常工作 - 而不是在导出的链接上轻松执行regex
。