递归爬网页面

时间:2014-11-29 05:27:18

标签: python web-scraping scrapy scrapy-spider

我的问题是:我在主页面上列出了一个列表(html - li),列表中的每个组件都要输入另一个页面,获取一些信息,将它们放在一个项目元素中,并与主页面列表中的其他antoher元素进行交互(html - li)。我已经完成了第一个代码,但我是Python,Scrapy的新手,并且我发现了制作代码的一些难题。

我得到了这个解决方案,但它为每个主列表元素生成了两个项目。

class BoxSpider(scrapy.Spider):
    name = "mag"
    start_urls = [
        "http://www.example.com/index.html"
    ]

    def secondPage(self, response):
        secondPageItem = CinemasItem()
        secondPageItem['trailer'] = 'trailer'
        secondPageItem['synopsis'] = 'synopsis'
        yield secondPageItem

    def parse(self, response):

        for sel in response.xpath('//*[@id="conteudoInternas"]/ul/li'):

            item = CinemasItem()
            item['title'] = 'title'
            item['room'] = 'room'
            item['mclass'] = 'mclass'
            item['minAge'] = 'minAge'
            item['cover'] = 'cover'
            item['sessions'] = 'sessions'

            secondUrl = sel.xpath('p[1]/a/@href').extract()[0]

            yield item
            yield scrapy.Request(url=secondUrl, callback=self.secondPage)

有些人可以帮我生成一个项目元素,其中包括' title',' room',' mclass',' minAge' ,' cover' sessions','预告片''简介'田野填满了?而不是一个带有' title',' room',' mclass',' minAge',' cover', '会议'填写的字段和其他与“预告片”,“简介”和“#39;简介'填充?

1 个答案:

答案 0 :(得分:1)

您需要将itemparse()实例化的secondPage传递给def parse(self, response): for sel in response.xpath('//*[@id="conteudoInternas"]/ul/li'): item = CinemasItem() item['title'] = 'title' item['room'] = 'room' item['mclass'] = 'mclass' item['minAge'] = 'minAge' item['cover'] = 'cover' item['sessions'] = 'sessions' secondUrl = sel.xpath('p[1]/a/@href').extract()[0] # see: we are passing the item inside the meta yield scrapy.Request(url=secondUrl, meta={'item': item}, callback=self.secondPage) def secondPage(self, response): # see: we are getting the item from meta item = response.meta['item'] item['trailer'] = 'trailer' item['synopsis'] = 'synopsis' yield item 回调:

{{1}}

另见: