如何在给定的起始页中遵循基于xpath的规则在Scrapy中抓取多个链接?

时间:2018-08-28 11:47:39

标签: xpath scrapy

我创建了一个蜘蛛程序,可以成功地从单个页面提取所需的数据,现在我需要它来爬行多个相似的页面并执行相同的操作。

起始页面将为this one,这里列出了游戏中的许多独特物品(Araku tiki,sidhbreath等),我希望蜘蛛抓取所有这些物品。

考虑到作为起始页,如何识别要跟随的链接?

这是我希望其遵循的前3个链接的xpath:

//*[@id="mw-content-text"]/div[3]/table/tbody/tr[1]/td[1]/span/span[1]/a[1]
//*[@id="mw-content-text"]/div[3]/table/tbody/tr[2]/td[1]/span/span[1]/a[1]
//*[@id="mw-content-text"]/div[3]/table/tbody/tr[3]/td[1]/span/span[1]/a[1]

如您所见,中间的数字在增加,依次为1、2、3等。如何抓取这些页面?

以下是我为第一项Araku Tiki工作的代码片段,其页面设置为开始:

import scrapy
from PoExtractor.items import PoextractorItem
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class RedditSpider(scrapy.Spider):
    name = "arakaali"
  #  allowed_domains = ['pathofexile.gamepedia.com']
    start_urls = ['https://pathofexile.gamepedia.com/Araku_Tiki']

    rules = (
        Rule(LinkExtractor(allow=(), restrict_xpaths=()), callback="parse",
             follow=True),
    )



    def parse(self, response):
            item = PoextractorItem()
            item["item_name"] = response.xpath("//*[@id='mw-content-text']/span/span[1]/span[1]/text()[1]").extract()
            item["flavor_text"] = response.xpath("//*[@id='mw-content-text']/span/span[1]/span[2]/span[3]/text()").extract()
            yield item

请注意:我也无法使其遵循起始页中的所有链接,仅当起始页包含所请求的数据时,我的代码才有效。

在此先感谢您的答复。

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式发送请求。

  

1。由于您使用的是scrapy,因此可以使用以下代码

UIPickerView

parse_page1将请求发送到url,您将在parse_page2函数中获得响应。

  

2。您甚至可以使用python请求模块发送请求,

if uipicker.gettext ()! = "mystring" {
    uipicker.selectext("mystring)
}

如果对此有任何疑问,请发表评论,谢谢