• python 爬取腾讯漫画(免费)


    python 爬取腾讯漫画(免费)亲测有效

      1 import requests
      2 from lxml import html
      3 from selenium import webdriver
      4 from time import sleep
      5 from bs4 import BeautifulSoup
      6 from selenium.webdriver.chrome.options import Options
      7 import os
      8 
      9 #打开腾讯动漫首页
     10 url = 'https://ac.qq.com/'
     11 #给网页发送请求
     12 data = requests.get(url).text
     13 #将网页信息转换成xpath可识别的类型
     14 htmlSrc = html.etree.HTML(data)
     15 #提取到每个漫画的目录页地址
     16 comic_list = htmlSrc.xpath('//a[@class="in-rank-name"]/@href')
     17 #print(comic_list)
     18 #遍历提取到的信息
     19 for comic in comic_list:
     20     #拼接成为漫画目录页的网址
     21     comic_url = url + str(comic)
     22     #从漫画目录页提取信息
     23     url_data = requests.get(comic_url).text
     24     #准备用xpath语法提取信息
     25     data_comic = html.etree.HTML(url_data)
     26     #提取漫画名--text()为提取文本内容
     27     name_comic = data_comic.xpath("//h2[@class='works-intro-title ui-left']/strong/text()")
     28     #提取该漫画每一页的地址
     29     item_list = data_comic.xpath("//span[@class='works-chapter-item']/a/@href")
     30     # print(name_comic)
     31     # print(item_list)
     32     #以漫画名字为文件夹名创建文件夹
     33     os.makedirs('comic/' + str(name_comic))
     34     #将一本漫画的每一章地址遍历
     35     for item in item_list:
     36         #拼接每一章节的地址
     37         item_url = url + str(item)
     38         #print(item_url)
     39         #请求每一章节的信息
     40         page_mes = requests.get(item_url).text
     41         #准备使用xpath提取内容
     42         page_ming = html.etree.HTML(page_mes)
     43         #提取章节名
     44         page_name = page_ming.xpath('//span[@class="title-comicHeading"]/text()')
     45         #print(page_name)
     46         #再以章节名命名一个文件夹
     47         os.makedirs('comic/' + str(name_comic) + '/' + str(page_name))
     48 
     49         #以下为代码的主体部分
     50 
     51         #设置谷歌无界面浏览器
     52         chrome_options = Options()
     53         chrome_options.add_argument('--headless')
     54         chrome_options.add_argument('--disable-gpu')
     55         #webdriver位置
     56         path = r'/home/jmhao/chromedriver'
     57         #浏览器参数设置
     58         browser = webdriver.Chrome(options=chrome_options)
     59         #开始请求第一个章节的网址
     60         browser.get(item_url)
     61         #设置延时,为后续做缓冲
     62         sleep(2)
     63         #browser.get_screenshot_as_file(str(page_name) + ".png")
     64         #尝试执行下列代码
     65         try:
     66             #设置自动下滑滚动条操作
     67             for i in range(1, 100):
     68                 #滑动距离设置
     69                 js = 'var q=document.getElementById("mainView").scrollTop = ' + str(i * 1000)
     70                 #执行滑动选项
     71                 browser.execute_script(js)
     72                 #延时,使图片充分加载
     73                 sleep(2)
     74             sleep(2)
     75             #将打开的界面截图保存,证明无界面浏览器确实打开了网页
     76             browser.get_screenshot_as_file(str(page_name) + ".png")
     77             #获取当前页面源码
     78             data = browser.page_source
     79             #在当前文件夹下创建html文件,并将网页源码写入
     80             fh = open("dongman.html", "w", encoding="utf-8")
     81             #写入操作
     82             fh.write(data)
     83             #关掉无界面浏览器
     84             fh.close()
     85 
     86             #下面的操作为打开保存的html文件,提取其中的图片信息,并保存到文件夹中
     87 
     88             #用beautifulsoup打开本地文件
     89             html_new = BeautifulSoup(open('dongman.html', encoding='utf-8'), features='html.parser')
     90             #提取html文件中的主体部分
     91             soup = html_new.find(id="mainView")
     92             #设置变量i,方便为保存的图片命名
     93             i = 0
     94             #提取出主体部分中的img标签(因为图片地址保存在img标签中)
     95             for items in soup.find_all("img"):
     96                 #提取图片地址信息
     97                 item = items.get("src")
     98                 #请求图片地址
     99                 comic_pic = requests.get(item).content
    100                 #print(comic_pic)
    101                 #尝试提取图片,若发生错误则跳过
    102                 try:
    103                     #打开文件夹,将图片存入
    104                     with open('comic/' + str(name_comic) + '/' + str(page_name) + '/' + str(i + 1) + '.jpg', 'wb') as f:
    105                         #print('正在下载第 ', (i + 1), ' 张图片中')
    106                         print('正在下载' , str(name_comic) , '-' , str(page_name) , '- 第' , (i+1) , '张图片')
    107                         #写入操作
    108                         f.write(comic_pic)
    109                         #更改图片名,防止新下载的图片覆盖原图片
    110                         i += 1
    111                 #若上述代码执行报错,则执行此部分代码
    112                 except Exception as err:
    113                     #跳过错误代码
    114                     pass
    115         # 若上述代码执行报错(大概率是由于付费漫画),则执行此部分代码
    116         except Exception as err:
    117             #跳过错误代码
    118             pass
    没有借口
  • 相关阅读:
    Longest Mountain in Array 数组中的最长山脉
    css 解决 图片 底部 3像素问题
    获取当前年月日2020-09-30格式
    vue + elememt ui table 实现滚屏效果
    滚动字
    layui 之监听 select 的变化
    正则匹配非汉字
    layui form里的select元素动态赋值无效
    layui 之 弹框重新打开 upload无效
    GPS坐标转百度坐标
  • 原文地址:https://www.cnblogs.com/wutao1935/p/15575655.html
Copyright © 2020-2023  润新知