scrapy学习有几个月了,普通scrapy和crawl都能够实现,现在碰到一个问题:
在使用scrapy爬取多分页后,如何把多分页内容合并写入到一个item[x]内?
我现在使用 yield Request 至 def art_url 来获取分页内容,用append把内容集合后,用 item['image_urls'] = self.art_urls 来接收结果,
但结果一直接收,每篇内容的分页的接收导致很多,请教一下,如何把每篇的分页内容合并写入一项itme?
刚学不到半年,代码凌乱,望包含,主要是想学习如何爬取小说站,把每一章都合并在一起,不要分页搞很多数据,和合适代码推荐下,研究学习,谢谢了
我的代码:
art_urls = []
rules = (
Rule(LinkExtractor(allow='wenzhang/',restrict_xpaths=('//table[@id="dlNews"]')), callback='parse_item', follow=True),
)
def parse_item(self, response):
print(response.url)
item = SpiderItem()
conn = Redis(host='127.0.0.1', port=6379)
item['title'] = response.xpath('//h1/text()').extract_first()
ex = conn.sadd('movies_url', response.url)
for next_href in response.xpath('//div[@class="pager"]/ul/li/a/@href').extract():
next_url = self.base_url + next_href.replace('../','')
if ex == 1:
# print('开始解析单页')
yield Request(next_url, callback=self.art_url)
# yield scrapy.Request(url=next_url, callback=self.parse_detail, meta={'title': title,'img_src':img_src})
else:
print("无数据更新!!!")
# print(self.art_urls)
item['image_urls'] = self.art_urls
# print(len(item['image_urls']))
# print(item)
yield item
def art_url(self, response):
art_urls = response.xpath('//div[@id="content"]/div/p/img/@src').extract()
for art_url in art_urls: # 开始解析分页
art_url = art_url.replace('../../upload/','')
self.art_urls.append(art_url)