python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...
思路
之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以可以用for循环创建n个线程,线程的target就是get_text,参数就是章节的url。
被爬取页面
随便点开的,辣眼睛哈哈哈
全部章节页
from bs4 import *
import socket
import time
#在小说章节页爬取所有章节链接
def get_html():
#从你的浏览器控制台复制出http报文的header信息
header = {'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'}
url = 'https://www.dingdiann.com/ddk81000/'
#发送一个http请求,读出网页内容存到html
req = urllib.request.Request(url,headers=header)
html = urllib.request.urlopen(req).read()
#网页里有中文,需要decode
html.decode('utf-8','ignore')
#用BeautifulSoup处理html 不加‘lxml’参数会警告
soup = BeautifulSoup(html,'lxml')
#chapters用来存放所有章节的链接
chapters = []
dds = soup.find_all('dd')
for dd in dds:
chapters.append('https://www.dingdiann.com'+dd.a.get('href'))
#print(dd.a.get('href'))
return chapters
#获取章节文本信息
def get_text(url):
header = {'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'}
req = urllib.request.Request(url,headers=header)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8','igore')
#关闭请求 防止服务器拒绝服务
response.close()
soup = BeautifulSoup(html,'lxml')
#title = soup.find(class_='bookname').h1.text
try:
#找到章节名
title = soup.find(class_='bookname').h1.text
#为中文字符串构造正则表达式,识别出“第X章”
str = title.encode('utf-8')
filename = re.search(u'.*章'.encode('utf-8'),str).group().decode('utf-8')
#用追加方式打开文件,文件名是“第X章”
f = open('C:/Users/liuxu/Desktop/book/'+filename+ '.txt','w+')
#写入标题
f.write(title+'\n\n')
#逐行写入小说段落
text = soup.find(id='content').text
lines = re.findall(r'\s{2}\S*',text)
for line in lines:
f.write(line+'\n')
#关闭文件
f.close()
except:
#异常处理 防止因为出错而中断爬取程序
print('error in writing')
#socket.setdefaulttimeout(20)
threads = []
for chapter in get_html():
th = threading.Thread(target=get_text,args=(chapter,))
threads.append(th)
for t in threads:
t.start()
#每两个进程之间间隔3秒 防止报出错误“[WinError 10054] 远程主机强迫关闭了一个现有的连接”
time.sleep(3)
爬取结果
想和大家讨论的部分
个人感觉用了多线程之后速度并没有很大的提升,速度大致是20个txt文件/分钟,是否有单个机器上继续提升爬取速度的方法?
下一步打算搞点能被封ip的爬取行为,然后学学分布式爬虫。加油~
python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...相关推荐
- python多线程爬虫 爬取多个网页_Python 多线程抓取网页
最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2. ...
- python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium
selenium--自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的.然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析JavaScript的能力. ...
- python多线程爬取多个网页_python多线程爬取网页
#-*- encoding:utf8 -*- ''' Created on 2018年12月25日 @author: Administrator ''' from multiprocessing.du ...
- python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页
目标分析: 目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL: ...
- python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...
一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...
- python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...
一.需求:有一个通过抓包得到的京东商品的JSON链接,解析该JSON内容,并提取出特定id的商品价格p,json内容如下: jQuery923933([{"op":"75 ...
- python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...
一,尝试用BeautifulSoup抓取 先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx 可以看到门店列表如下图: 打 ...
- python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍
一般的,我们想抓取一个网站所有的URL,首先通过起始URL,之后通过网络爬虫提取出该网页中所有的URL链接,之后再对提取出来的每个URL进行爬取,提取出各个网页中的新一轮URL,以此类推.整体的感觉就 ...
- 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf
Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...
最新文章
- jQuery.fly插件实现添加购物车抛物线效果
- python语音程序设计基础篇_【笔记】python自学笔记(基础篇)——字典操作
- ECShop后台管理菜单修改
- Unity2D实现贴图凹凸感并接受实时光照效果
- MySQL账户安全设置
- JAVA多线程,真的能提高效率吗
- 多个iframe同时加载并动态调整大小
- 原则 principles
- [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
- 单链表以及双向链表的操作
- 大型门户网站的商业计划书(包括技术解决方案)
- 永中文档转换服务Swagger调用说明
- Mysql基础-常用sql语句
- VMware清理vmdk文件,解决vmdk越来越大的问题
- “先进”的飞书为何搞不定钉钉?
- 博客备份系统之一:PDF,Word,TXT文件操作类
- Canonical标签的作用及使用方法
- python+matplotlib绘图线条类型、颜色、散点类型
- 命令行使用oracle19c_把oracle19c数据导入oracle11g
- html name选择器,iframe标签的name属性