文章目录

  • 前言
  • 一、分析网页
  • 二、源代码
  • 三、结果
  • 总结

前言

上星期《斗破苍穹》终于出了,等了这么久,但是呢对于我这种没看过小说的人来说觉得看完之后不过瘾,于是就有了这一片文章…


提示:以下是本篇文章正文内容,下面案例可供参考

一、分析网页

分析一级页面发现,右键查看网页源代码就可以得到想要的内容,包括名字和url。但前面有九个是我们不需要的而且url只有后面一部分,所以我们需要跳过前面九个然后再给其他的url进行一个拼接。

分析二级页面,按下F12,发现内容都在一个div节点下。

此处的# 在html中意思是空格
既然分析到位了,那我们就开始办正事吧。

二、源代码

# -!- coding: utf-8 -!-
import re
import requests
import time
from fake_useragent import UserAgent #user-agent库
from threading import Thread #多线程
from lxml import etree #xpathclass Doupo:def __init__(self):self.url = 'https://www.tycqxs.com/57_57672/' #一级页面self.headers = {'User-Agent':UserAgent().random} #生成一个随机的请求头self.url_head = 'https://www.tycqxs.com' #二级页面的前缀self.urls = [] #储存urlself.names = [] #储存名字#请求网页def get_html(self,url):response = requests.get(url=url,headers=self.headers).content.decode('utf-8','ignore') #向url发起请求并得到响应内容return response #返回响应#用re解析网页def parse_html(self,html,regex):info = regex.findall(html) #在html中找regex并得到一个列表 列表中是结果return info #返回找到的结果#用xpath提取具体页面的内容def xpath_html(self,i):while self.urls: #创建循环 如果列表里面有内容就会一直循环 直到没有内容就会结束循环url = self.urls.pop(0) #执行一次便删除第一个urlname = self.names.pop(0) #执行一次便删除一个name   这里url和name是对应的html = etree.HTML(self.get_html(url)) #将url传给请求函数得到响应内容 然后将内容转化为Element对象content = html.xpath('//*[@id="content"]/text()') #得到这个标签下的所有内容for e in content: #遍历所有内容with open('./斗破苍穹/'+name,'a+',encoding='utf-8') as f: #打开在本目录下的斗破苍穹文件夹创建(或在创建好的文本下追加)以utf-8的模式写入f.write(' '*7+e.strip()+'\n') #为了美观 先去头尾空格换行 再在前面加空格 后面换行(因为如果直接写入那么两行内容中间空太多行了)print("{}完成一个任务!".format(i)) #打印线程几完成了一个任务time.sleep(0.1) #每次执行完停0.1秒#创建多线程def jobs(self):jobs = [] #创建一个列表用来储存线程for i in range(16): #创建16个线程a = Thread(target=self.xpath_html,args=(i,)) #执行self.xpath_html函数 并传给一个参数i给它jobs.append(a) #在列表中加入线程a.start() #启动线程[i.join() for i in jobs] #执行完成以后回收线程#主函数def run(self):one_html = self.get_html(self.url) #向一级页面发起请求,并得到响应内容regex = re.compile("<dd><a href='(.*?)' >(.*?)</a></dd>", re.S) #创建模式对象 第一空匹配url(只有后缀) 第二空匹配章节名字info = self.parse_html(one_html,regex) #将响应内容和模式对象传给解析的函数parse_html 返回一个列表for i in info[9:]: #列表的前九个是一些介绍就不需要了 所以从第十个开始遍历if i[1][0] != '第': #排除中间的一些广告(如果开头第一个字不是“第”那么就跳过它)continueelse: #如果是就执行这一步url = self.url_head+i[0] #将二级页面的前缀和它结合一起成为一个完整的urlself.urls.append(url) #将这个url添加到self.urls中name = ''.join(i[1].split(' '))+'.txt' #拼接文件名(第一章 陨落的天才)--> (第一章陨落的天才.txt)self.names.append(name) #将拼接的文件名加入self.names中#待上面的url和name都加入完成之后 用多线程来执行、爬取内容self.jobs()if __name__ == '__main__':spider = Doupo()spider.run() #调用方法

三、结果


总结

本文用了re和xpath解析,多线程爬取数据。
如有不对的地方还望各位大佬指出,谢谢。

python多线程爬斗破苍穹相关推荐

  1. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  2. Python 多线程爬取西刺代理

    西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 镜像地址:https://www.blib.cn/url/xcdl.html 首先找到所有的tr标签,与class ...

  3. python多线程爬取妹子图

    python多线程爬取妹子图 python使用版本: 3.7 目的: 自己选择下载目录,逐个将主题图片保存到选定目录下. 效果: 一秒钟左右下载一张图片,下了七八十组图片暂时没什么问题,不放心的话,可 ...

  4. python多线程爬取ts文件并合成mp4视频

    python多线程爬取ts文件并合成mp4视频 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python多线程爬取ts文件并合成mp4视频 前言 一.分析页面 ...

  5. python多线程爬取图片

    2019独角兽企业重金招聘Python工程师标准>>> 创建一个 Queue.Queue() 的实例,然后使用数据对它进行填充. 将经过填充数据的实例传递给线程类,后者是通过继承 t ...

  6. python多线程爬取世纪佳缘女生资料并简单数据分析

    一. 目标 ​ 作为一只万年单身狗,一直很好奇女生找对象的时候都在想啥呢,这事也不好意思直接问身边的女生,不然别人还以为你要跟她表白啥的,况且工科出身的自己本来接触的女生就少,即使是挨个问遍,样本量也 ...

  7. python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...

    原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...

  8. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  9. Python多线程爬取小说网站小说

    问题阐述 爬取网站小说,这里我们以努努书坊中爬取刘慈欣的小说球状闪电为例子! 技术支持 python多线程 request+beautifulSoup解析网页 代码演示[直接粘贴即可运行] impor ...

最新文章

  1. c语言中循环结构的作用,C语言循环结构知识点
  2. /org/gnome/Terminal/Factory0: Could not connec
  3. python创建字典型数据_Python数据类型之字典dict
  4. Visual Studio下包含多项目的解决方案及项目间引用
  5. 【活动(深圳)DevOps/.NET 微服务 秋季分享会】火热报名中!
  6. easyui 调用dialog中的方法_SolidWorks中标准件库的创建及调用方法
  7. 正则表达式的介绍与底层分析
  8. ThinkJS框架入门详细教程(二)新手入门项目
  9. 超炫的3D特效程序管理功能android
  10. linux 修改图片像素,如何修改照片分辨率
  11. 公众号快速搭建淘客机器人教程
  12. 推荐几款ReactJS最优秀的UI框架
  13. 《程序员》9月刊推荐:移动应用产业链大势图
  14. 【Proteus仿真】Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制
  15. java 1f8b0800,常用ASCII/ISO-8859-1/GB2312/GBK/UTF-8等字符编码梳理
  16. 2016传智SSH框架CRM项目(5天)笔记(2017年5月20日22:11:15)
  17. 噪音恐惧症_比恐惧强:公开的心理健康
  18. 二值logit模型的适用条件_你们要的二项Logit模型在这里——离散选择模型之八...
  19. 可见光成像通信(Optical Camera Communication,OCC)——基于IEEE 802.15.7-2018标准的解读
  20. 微信小程序tab切换(点击标题切换,滑动屏幕切换)

热门文章

  1. 论python在金融行业的重要性_论金融在各行业的重要性
  2. 基于51单片机的大棚环境土壤湿度光强监测系统proteus仿真原理图PCB
  3. 818这些年碰到的假简历真套路(附反套路攻略)
  4. 28 网络文件共享服务
  5. C# GroupBy 用法
  6. 目标检测中Regional Proposal到底是什么,RPN和Region Proposal、Proposals三者联系
  7. 淘宝接口 TopAPi
  8. 手柄xinput模式_玩家新宠,谷粒金刚PRO游戏手柄不全面体验
  9. 一幅漫画告诉你:NB-IoT背后,大家都在说的LoRa是啥?
  10. Selenium自动化测试框架基础学习(元素表单操作)(Selenium操作)