使用Scrapy抓取多个页面

时间:2017-07-17 18:44:16

标签: python web-scraping scrapy web-crawler

目标

使用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

1 个答案:

答案 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属性将它们传递给以下请求。

请澄清,很难理解用例。