gpt4 book ai didi

python - 递归抓取页面

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:05 25 4
gpt4 key购买 nike

我的问题是:我在主页上有一个列表(html - li),对于列表中的每个组件,我想在另一个页面中输入,获取一些信息,将其放在一个项目元素中,然后进行交互位于主页列表(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)

有人可以帮我生成一个包含“标题”、“房间”、“mclass”、“minAge”、“封面”、“ session ”、“预告片”、“概要”字段的项目元素吗?而不是一项填写“标题”、“房间”、“mclass”、“minAge”、“封面”、“ session ”字段,而另一项填写“预告片”、“剧情简介”?

最佳答案

您需要传递在meta内的parse()中实例化的itemsecondPage 回调:

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

另请参阅:

关于python - 递归抓取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27199188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com