scrapy漫画爬虫-漫客栈
·
目标
爬取漫客栈上的免费漫画
思路
使用scrapy进行爬取,写个pipeline进行存储到数据库,去重以及下载保存。
spider部分
每个漫画的信息都存储在了div中,先获取一个div_list,然后再遍历进行需要的信息的收集。
div_list = response.xpath("//div[@class='cate-comic-list clearfix']/div")
for div in div_list:
item = {}
item["title"] = div.xpath("./p[1]/a/text()").extract_first()
item["detail_url"] = div.xpath("./a/@href").extract_first()
对detail_url进行判断是否为空,不为空则使用urljoib的方法进行补全,因为在上一步中获取到的url是不完整的,补全之后进行yield请求,递交给下一个函数进行处理
if item["detail_url"] is not None:
item["detail_url"] = urllib.parse.urljoin(response.url,item["detail_url"])
yield scrapy.Request(
item["detail_url"],
callback=self.next_parse,
meta={"item":item}
)
传递到下一个函数后,获取每一话的url然后再传递给下一个函数获取图片的链接。
item = response.meta["item"]
li_list = response.xpath("//ul[@class='chapter__list-box clearfix hide']/li")
for li in li_list:
item["qk_url"] = li.xpath("./a/@data-hreflink").extract_first()
if item["qk_url"] is not None:
item["qk_url"] = urllib.parse.urljoin(response.url,item["qk_url"])
yield scrapy.Request(
item["qk_url"],
callback=self.detail_parse,
meta={"item":item}
)
把获取到的图片链接用一个列表来存放,然后把item yield给pipeline进行下一步的处理。
item = response.meta["item"]
item["qi_kan"] = response.xpath("//a[@class='last-crumb']/text()").extract_first()
imgs = []
div_list = response.xpath("//div[@class='rd-article-wr clearfix']/div")
for div in div_list:
img = div.xpath("./img/@data-src").extract_first()
if img is not None:
imgs.append(img)
item["image_urls"] = imgs
yield item
pipeline部分
去重部分用hashlib对图片的url进行一个sha1的转码然后存储到一个txt文本,然后请求前进行一个对比,如果存在则break,不存在则进行请求,然后把sha1码给存储到txt中。
for url in item["image_urls"]:
sha1 = hashlib.sha1()
sha1.update(url.encode())
a = sha1.hexdigest()
with open(self.filter_path, 'r') as f:
if a in f.read():
break
完整代码
本次的爬虫是对免费漫画的一个规模化爬取,只对第一页的免费漫画进行了爬取,如有需要可以获取下一页的url。
如果搜索单个漫画的爬虫我觉得使用selenium会比较好。
本次的代码我放到了github上,有需要可以自行观看
https://github.com/gravf/python-webspider/tree/master/mkz2
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)