python – 如何使用Scrapy在页面内抓取?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何使用Scrapy在页面内抓取?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1535字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何使用Scrapy在页面内抓取?](/upload/InfoBanner/zyjiaocheng/826/ef14d0c3aa5e4fff9d596b4a1c3d774f.jpg)
我正在使用Python和Scrapy来解决这个问题.
我正在尝试抓取网页A,其中包含指向网页B1,B2,B3,…的链接列表.每个B页面都包含指向另一个页面的链接,C1,C2,C3,…,其中包含图像.
因此,使用Scrapy,伪代码中的想法是:
links = getlinks(A)
for link in links:
B = getpage(link)
C = getpage(B)
image = getimage(C)
但是,在尝试解析Scrapy中的多个页面时,我遇到了问题.这是我的代码:
def parse(self, response):
hxs = HtmlXPathSelector(response)
links = hxs.select('...')
items = []
for link in links:
item = CustomItem()
item['name'] = link.select('...')
# TODO: Somehow I need to go two pages deep and extract an image.
item['image'] = ....
我该怎么做呢?
(注意:我的问题类似于Using multiple spiders at in the project in Scrapy,但我不确定如何从Scrapy的Request对象中“返回”值.)
解决方法:
在scrapy中,如果需要发出更多请求,则解析方法需要返回一个新请求(useyield作为scrapy适用于生成器).在此请求中,您可以设置对所需函数的回调(要递归,只需再次传递解析).这是爬行到页面的方式.
您可以查看this recursive crawler作为示例
按照您的示例,更改将是这样的:
def parse(self, response):
b_pages_links = getlinks(A)
for link in b_pages_links:
yield Request(link, callback = self.visit_b_page)
def visit_b_page(self, response):
url_of_c_page = ...
yield Request(url_of_c_page, callback = self.visit_c_page)
def visit_c_page(self, response):
url_of_image = ...
yield Request(url_of_image, callback = self.get_image)
def get_image(self, response):
item = CustomItem()
item['name'] = ... # get image name
item['image'] = ... # get image data
yield item
还要检查scrapy documentation和these random code snippets.他们可以帮助很多:)
内容总结
以上是互联网集市为您收集整理的python – 如何使用Scrapy在页面内抓取?全部内容,希望文章能够帮你解决python – 如何使用Scrapy在页面内抓取?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。