目标
使用Scrapy和Python制作两级深度Web爬虫。
问题
网站的结构为1页,抓取工具跟踪链接并提取正确的数据大约有10个项目。问题是这个结构是10页的递归,但是那些最后页面的链接是变化的,并且注意指向home1,但是home2。对于第2页到第10页,我们希望爬网程序执行相同的例程,因为爬网程序所遵循的模式会针对这些页面以递归方式重复。
网站结构
->website.com
--> /home1
---> /page/2
--> /home2/doc/item
我可以使用下一个抓取工具从第一级获取数据。
第一级抓取工具
from scrapy.contrib.spiders import CrawlSpider, Rule
from mySpider.items import Item
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name="spider"
allowed_domains = ["website.com"]
start_urls = ["https://website.com/home1/"]
rules = [Rule(LinkExtractor(allow=('(/home2/doc/item((?!:).)*$'),), callback="parse_item", follow=True)]
def parse_item(self, response):
item = Item()
name = response.xpath('//h3/text()')[0].extract()
item['name'] = name
return item
答案 0 :(得分:0)
我不确定我是否完全理解您的问题,但如果您尝试从第一页抓取多个网址,则可以在start_urls数组中列出它们。这将允许您独立地抓取每个页面。
start_urls = [
"https://website.com/home1/",
"https://website.com/home2/",
"https://website.com/home3/"
]
但是,如果您要抓取home1并跟踪记录URL的顺序,以便您可以在以下home2,home3等中抓取它们,则可以创建全局列表并将URL保存到列表。另一种选择是创建URL列表,并使用带有scrapy.Request的meta属性将它们传递给以下请求。
请澄清,很难理解用例。