行行网电子书多线程爬取-撸代码

代码非常简单,有咱们前面的教程做铺垫,很少的代码就可以实现完整的功能了,最后把采集到的内容写到 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多线程爬取行行网电子书相关推荐

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

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

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

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

  3. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

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

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

  5. python多线程爬取妹子图

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

  6. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  7. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  8. [python爬虫]爬取天气网全国所有县市的天气数据

    [python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...

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

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

最新文章

  1. ubuntu系统无法ssh登录--安装openssh
  2. TensorFlow学习入门
  3. 【 2013 Multi-University Training Contest 8 】
  4. springboot 增加prometeus监控
  5. Hadoop核心组件以及发行版
  6. 匹配中文字符的正则表达式: [u4e00-u9fa5](
  7. MVVM模式的一个小例子
  8. 分布式和微服务的区别
  9. 【ios】如何成为一名ios开发
  10. u3d_shader_surface_shader_1
  11. c#数组赋初值_【自学C#】|| 笔记 13 数组
  12. 【总结】Unity游戏优化
  13. 【highcharts】highcharts(highmaps)实现疫情地图(一看就会篇)
  14. matlab中功率因数模块,最经典的功率因数控制器设计方案
  15. 接入微信SDK 获取用户定位
  16. 判断一个数是否为质数的三种方法
  17. CentOS 安装显卡驱动
  18. 艾兰岛编辑器-UI面板
  19. 多线程 4——线程通信、线程池、定时器
  20. Android VectorDrawable 的使用

热门文章

  1. HTTP状态405-此URL不支持HTTP方法GET
  2. Matlab中cell(元胞数组)使用实例,显示cell里的数值
  3. 谷歌浏览器所有版本下载_我下载了Google了解我的所有信息
  4. 3Dlut表相关知识
  5. 1 ClickHouse 安装部署(tgz)
  6. Day400401402403404405406.商品服务 -谷粒商城
  7. 恋爱话术小程序源码,土味情话,恋爱导师,流量主
  8. C++字符串输入(详解)
  9. 常用数字与字母的正则表达
  10. 使用 SNMP 读取和收集性能数据