简介

主要爬取腾讯动漫上某一漫画的所有图片的url

  • 所用到的库
  • 分析腾讯动漫网址
  • 代码

所用到的库

  • gevent gevent.pool
  • requests
  • selenium
  • xpath

分析腾讯动漫

就以我是大神仙这一免费漫画为例,分析其标签。 url地址为 ac.qq.com/Comic/Comic…

  • 获取漫画章节url
    621058 表示漫画的代码#获取列表 el.xpath('//*[@id="chapter"]/div[2]/ol[1]/li')# 判断过滤不需要的章节startswith(('第', '序'))#将获得的章节存储在队列中list_url.append(item)self.queue.put(item)
复制代码
  • 获取漫画章节详情

第 111 话 ac.qq.com/ComicView/i…

两种方法获取列表图片url

  • 第一种通过selenium 模拟浏览器滑动来获取真实的url,这种方法比较慢,有时候有些图片可能因为滑动太快url地址加载不出来。当然可以设置滑动时间保证都能获取得到
browser.get('http://ac.qq.com/ComicView/index/id/621058/cid/122')
for i in range(10):js = 'window.scrollTo(' + str(i * 1280) + ',' + str((i + 1) * 1280) + ')'  # 把内容滚动到指定的坐标browser.execute_script(js)time.sleep(1)
复制代码
  • 第二种分析网页滑动过程中加载的js
    已经分析出来在 其实imgurl 在页面加载时就已经有 只不过是保存在DATA中需要解密网页中 script 标签中有var DATA ="" 很长的字符串 这个需要解密 解密的js函数我们其实不需要知道
复制代码
我们可以在浏览器控制台上打印出来DATA 的值如下 这样就获取的所有的url了
复制代码
 那我们怎么获取DATA熟悉呢?其实不用获取DATA 只需要获取PICTURE这个就好了如果不用selenium 那需要解密var DATA 这个就比较麻烦了 所以还是用selenium吧def get_img_list(self, html_str):browser = self.webdirver(html_str)list_tmp = []# selenium 通过执行return 返回变量的值pic_list = browser.execute_script("return PICTURE")for pic in pic_list:item = {}item['href'] = pic['url']list_tmp.append(item)browser.quit()return list_tmp
复制代码

代码

import gevent.monkey
gevent.monkey.patch_all()import json
import time
from queue import Queueimport os
import requests
from gevent.pool import Pool
from lxml import etree
from pymongo import MongoClientfrom selenium import webdriver"""
多线程爬取
腾讯动漫
1.获取 动漫url
2.获取 章节url
3.获取 图片url
"""
class TencentCarton(object):def __init__(self):self.start_url = "http://ac.qq.com/Comic/ComicInfo/id/621058"self.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"}self.part_url = "http://ac.qq.com"self.queue = Queue()self.pool = Pool(5)self.is_running = Trueself.total_request_num = 0self.total_response_num = 0self.str_ss = "./我是大神仙/"def get_url_list(self):html = self.parse_url(self.start_url)el = etree.HTML(html)li_list = el.xpath('//*[@id="chapter"]/div[2]/ol[1]/li')list_url = []for li in li_list:for p in li.xpath("./p"):for span in p.xpath("./span[@class='works-chapter-item']"):item = {}list_title = span.xpath("./a/@title")[0].replace(' ', '').split(':')if list_title[1].startswith(('第', '序')):item['name'] = list_title[1]item['href'] = self.part_url + span.xpath("./a/@href")[0]item['title'] = list_title[0]list_url.append(item)self.queue.put(item)self.total_request_num += 1def parse_url(self, url):res = requests.get(url, headers=self.headers)return res.content.decode()def webdirver(self, html_str):chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(chrome_options=chrome_options)# 上面三行代码表示可以无界面爬取browser.get(html_str)return browserdef get_img_list(self, html_str):browser = self.webdirver(html_str)list_tmp = []pic_list = browser.execute_script("return PICTURE")for pic in pic_list:item = {}item['href'] = pic['url']list_tmp.append(item)browser.quit()return list_tmpdef save_content_list(self, data):json_str = json.dumps(data, ensure_ascii=False, indent=2)if not os.path.exists(self.str_ss):os.mkdir(self.str_ss)with open(self.str_ss + data['name'] + ".json", 'w', encoding='utf-8') as f:f.write(json_str)print(data['name'], "保存成功")def _execete_request_content_save(self):item = self.queue.get()print(item['href'], "开始请求")try:item['imge_list'] = self.get_img_list(item['href'])except Exception as f:print(f)# 保存self.save_content_list(item)self.total_response_num += 1def _callback(self, temp):if self.is_running:self.pool.apply_async(self._execete_request_content_save, callback=self._callback)def run(self):# 1. 准备url列表self.get_url_list()print(self.queue.qsize())for i in range(3):  # 设置并发数为3self.pool.apply_async(self._execete_request_content_save, callback=self._callback)while True:time.sleep(0.0001)if self.total_response_num >= self.total_request_num:self.is_running = Falsebreakif __name__ == '__main__':t1 = time.time()TC = TencentCarton()TC.run()print("total cost:", time.time() - t1)复制代码

Python 爬虫 携程池 爬取腾讯动漫相关推荐

  1. Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化

    大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...

  2. python爬虫实战之异步爬取数据

    python爬虫实战之异步爬取数据 文章目录 前言 一.需求 二.使用步骤 1.思路 2.引入库 3.代码如下 总结 前言 python中异步编程的主要三种方法:回调函数.生成器函数.线程大法. 以进 ...

  3. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  4. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

  5. python爬虫 豆瓣影评的爬取cookies实现自动登录账号

    python爬虫 豆瓣影评的爬取cookies实现自动登录账号 频繁的登录网页会让豆瓣锁定你的账号-- 网页请求 使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具 ...

  6. Python爬虫---爬取腾讯动漫全站漫画

    Python爬虫---爬取腾讯动漫全站漫画 操作环境 网页分析 明确目标 提取漫画地址 提取漫画章节地址 提取漫画图片 编写代码 导入需要的模块 获取漫画地址 提取漫画的内容页 提取章节名 获取漫画源 ...

  7. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  8. 《python爬虫实战》:爬取贴吧上的帖子

    <python爬虫实战>:爬取贴吧上的帖子 经过前面两篇例子的练习,自己也对爬虫有了一定的经验. 由于目前还没有利用BeautifulSoup库,因此关于爬虫的难点还是正则表达式的书写. ...

  9. Python 爬虫 中国行政区划信息爬取 (初学者)

    Python 爬虫 中国行政区划信息爬取 (初学者) 背景 环境准备 代码片段 1.定义地址信息对象 2.地址解析对象 2.1 获取web信息 2.2 web信息解析 2.3 区划信息提取 2.4 省 ...

最新文章

  1. LCD 常用的客观效果指标和测试方法
  2. 机器学习领域中的六大误区
  3. ajax后台如何把对象转为json_57. Django 2.1.7 查询数据返回json格式
  4. npm 安装依赖遇到的问题
  5. 2018可能大火的物联网应用
  6. Facebook 游戏开发更新文档 API 参考文档 v5.0
  7. mt4 谐波_MT4指标AB=CD Dashboard — AB = CD 谐波模式仪表盘指示器
  8. [教程] ios 4 以上安装mobile terminal的最简单方法
  9. 阻抗匹配四参数:反射系数、行波系数、驻波比、回波损耗
  10. 海尔电视 android,海尔电视遥控器
  11. 今日头条信息流 - 橙子建站
  12. 个人游戏经历及游戏体验(解谜向)
  13. complicated用法
  14. 河南信息统计学院微信公众平台API汇总
  15. 手机拨出等待时间长_手机打不出去电话怎么回事 一分钟轻松排查原因
  16. 互动教程 for Xcode10 and Swift4.2
  17. MTKAndroidP平台实现应用单独控制Camera某些效果参数
  18. Hydra Attention学习笔记
  19. 暑假小制作——DIY蓝牙小音箱
  20. [反汇编练习]160个CrackMe之001

热门文章

  1. 基于有Vue基础的微信小程序开发学习笔记
  2. BM立体匹配算法的参数详解
  3. 16个简单实用的.htaccess小贴示
  4. 1315_使用LOOPBACK模拟模式pyserial安装是否成功的测试
  5. 极光im发送Message被拉黑和消息发送失败的处理办法
  6. 新余电子计算机学校96文秘班,新余职教中心
  7. URG和PSH的特点及其区别
  8. Idea的Marketplace打不开终极解决
  9. 疯狂java学习笔记
  10. 【哈佛学习力10:使命感】