【发布时间】:2018-02-17 11:06:08
【问题描述】:
我想从站点 x1、...、xn 中抓取数据,并且对于每个 x,我会抓取 10 个内部站点。
我一一解析我的网站:
for el in get_data():
yield scrapy.Request(el, self.parse)
然后为每个站点 x 我设置一些属性:
self.site_id += 1
self.link_id = response.url
self.status = -9999
self.current_link = ""
self.link_img = ""
self.pattern_id = -9999
self.found_image = False
在检查后转到另一个解析器 10 个站点:
yield scrapy.Request(link_to_next_page, self.parse_inner_page)
def parse_inner_page(self, response):
...
yield LogoScrapeItem(site_id=self.site_id,
link_id=self.link_id,
status=self.status,
current_link=self.current_link,
pattern_id=self.pattern_id,
found_img=self.found_img,
link_img=self.link_img
)
我认为这个过程很简单:我们得到站点 x,对于这个站点 x,我们抓取 10 个内页,然后我们继续处理另一个 x 等等。
问题:为什么我的数据会混淆?一个数据条目可能包含来自一个站点的链接和来自另一个站点的图像?
可能的解决方案:
可能是scrapy的异步功能:
这是我所期望的:
parse_site -> parse_page_within -> parse_page_within-> parse_page_within-> parse_page_within-> parse_page_within
这可能是现实:
parse_site -> parse_site -> parse_site -> parse_page_within-> parse_page_within-> parse_page_within
另一种可能的解决方案:
也许如果我能够使用其中一些变量向其他解析方法发送一些数据,通过回调函数,我就不必依赖类变量的当前状态
如何逐页抓取我的页面?如果这是我的问题,我该如何停止异步操作,如果不是我该怎么办?
如何调试scrapy,一步一步看什么解析函数在一个接一个地执行?
【问题讨论】:
标签: python python-3.x scrapy web-crawler python-requests