Python多线程爬取行行网电子书
行行网电子书多线程爬取-撸代码
代码非常简单,有咱们前面的教程做铺垫,很少的代码就可以实现完整的功能了,最后把采集到的内容写到 csv 文件里面,(csv 是啥,你百度一下就知道了) 这段代码是IO密集操作 我们采用aiohttp模块编写。
第1步
拼接URL,开启线程。
import requests# 导入协程模块
import asyncio
import aiohttp
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36","Host": "www.ireadweek.com","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}async def get_content(url):print("正在操作:{}".format(url))# 创建一个session 去获取数据 async with aiohttp.ClientSession() as session:async with session.get(url,headers=headers,timeout=3) as res:if res.status == 200:source = await res.text() # 等待获取文本print(source)if __name__ == '__main__':url_format = "http://www.ireadweek.com/index.php/bookInfo/{}.html"full_urllist = [url_format.format(i) for i in range(1,11394)] # 11394loop = asyncio.get_event_loop()tasks = [get_content(url) for url in full_urllist]results = loop.run_until_complete(asyncio.wait(tasks))
上面的代码可以同步开启N多个线程,但是这样子很容易造成别人的服务器瘫痪,所以,我们必须要限制一下并发次数,下面的代码,你自己尝试放到指定的位置吧。
sema = asyncio.Semaphore(5)
# 为避免爬虫一次性请求次数太多,控制一下
async def x_get_source(url):with(await sema):await get_content(url)
第2步
处理抓取到的网页源码,提取我们想要的元素,我新增了一个方法,采用lxml进行数据提取。
def async_content(tree):title = tree.xpath("//div[@class='hanghang-za-title']")[0].text# 如果页面没有信息,直接返回即可if title == '':returnelse:try:description = tree.xpath("//div[@class='hanghang-shu-content-font']")author = description[0].xpath("p[1]/text()")[0].replace("作者:","") if description[0].xpath("p[1]/text()")[0] is not None else Nonecate = description[0].xpath("p[2]/text()")[0].replace("分类:","") if description[0].xpath("p[2]/text()")[0] is not None else Nonedouban = description[0].xpath("p[3]/text()")[0].replace("豆瓣评分:","") if description[0].xpath("p[3]/text()")[0] is not None else None# 这部分内容不明确,不做记录#des = description[0].xpath("p[5]/text()")[0] if description[0].xpath("p[5]/text()")[0] is not None else Nonedownload = tree.xpath("//a[@class='downloads']")except Exception as e:print(title)returnls = [title,author,cate,douban,download[0].get('href')]return ls
第3步
数据格式化之后,保存到csv文件,收工!
print(data)with open('hang.csv', 'a+', encoding='utf-8') as fw:writer = csv.writer(fw)writer.writerow(data)print("插入成功!")
行行网电子书多线程爬取-运行代码,查看结果
Python多线程爬取行行网电子书相关推荐
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- python多线程爬取ts文件并合成mp4视频
python多线程爬取ts文件并合成mp4视频 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python多线程爬取ts文件并合成mp4视频 前言 一.分析页面 ...
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
[实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...
- Python 多线程爬取西刺代理
西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 镜像地址:https://www.blib.cn/url/xcdl.html 首先找到所有的tr标签,与class ...
- python多线程爬取妹子图
python多线程爬取妹子图 python使用版本: 3.7 目的: 自己选择下载目录,逐个将主题图片保存到选定目录下. 效果: 一秒钟左右下载一张图片,下了七八十组图片暂时没什么问题,不放心的话,可 ...
- python爬虫爬取当当网的商品信息
python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...
- python爬虫爬取知网
python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...
- [python爬虫]爬取天气网全国所有县市的天气数据
[python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...
- 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!
最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...
最新文章
- ubuntu系统无法ssh登录--安装openssh
- TensorFlow学习入门
- 【 2013 Multi-University Training Contest 8 】
- springboot 增加prometeus监控
- Hadoop核心组件以及发行版
- 匹配中文字符的正则表达式: [u4e00-u9fa5](
- MVVM模式的一个小例子
- 分布式和微服务的区别
- 【ios】如何成为一名ios开发
- u3d_shader_surface_shader_1
- c#数组赋初值_【自学C#】|| 笔记 13 数组
- 【总结】Unity游戏优化
- 【highcharts】highcharts(highmaps)实现疫情地图(一看就会篇)
- matlab中功率因数模块,最经典的功率因数控制器设计方案
- 接入微信SDK 获取用户定位
- 判断一个数是否为质数的三种方法
- CentOS 安装显卡驱动
- 艾兰岛编辑器-UI面板
- 多线程 4——线程通信、线程池、定时器
- Android VectorDrawable 的使用