思路

之前写过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)...相关推荐

  1. python多线程爬虫 爬取多个网页_Python 多线程抓取网页

    最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2. ...

  2. python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium

    selenium--自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的.然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析JavaScript的能力. ...

  3. python多线程爬取多个网页_python多线程爬取网页

    #-*- encoding:utf8 -*- ''' Created on 2018年12月25日 @author: Administrator ''' from multiprocessing.du ...

  4. python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页

    目标分析: 目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL: ...

  5. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  6. python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...

    一.需求:有一个通过抓包得到的京东商品的JSON链接,解析该JSON内容,并提取出特定id的商品价格p,json内容如下: jQuery923933([{"op":"75 ...

  7. python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...

    一,尝试用BeautifulSoup抓取 先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx 可以看到门店列表如下图: 打 ...

  8. python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍

    一般的,我们想抓取一个网站所有的URL,首先通过起始URL,之后通过网络爬虫提取出该网页中所有的URL链接,之后再对提取出来的每个URL进行爬取,提取出各个网页中的新一轮URL,以此类推.整体的感觉就 ...

  9. 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf

    Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...

最新文章

  1. jQuery.fly插件实现添加购物车抛物线效果
  2. python语音程序设计基础篇_【笔记】python自学笔记(基础篇)——字典操作
  3. ECShop后台管理菜单修改
  4. Unity2D实现贴图凹凸感并接受实时光照效果
  5. MySQL账户安全设置
  6. JAVA多线程,真的能提高效率吗
  7. 多个iframe同时加载并动态调整大小
  8. 原则 principles
  9. [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph
  10. 单链表以及双向链表的操作
  11. 大型门户网站的商业计划书(包括技术解决方案)
  12. 永中文档转换服务Swagger调用说明
  13. Mysql基础-常用sql语句
  14. VMware清理vmdk文件,解决vmdk越来越大的问题
  15. “先进”的飞书为何搞不定钉钉?
  16. 博客备份系统之一:PDF,Word,TXT文件操作类
  17. Canonical标签的作用及使用方法
  18. python+matplotlib绘图线条类型、颜色、散点类型
  19. 命令行使用oracle19c_把oracle19c数据导入oracle11g
  20. html name选择器,iframe标签的name属性

热门文章

  1. 如何通过数据分析,提升游戏次日留存
  2. java,NIO,UDP协议网络通信DEMO
  3. 数据分析师认证考试形式发布,如何掌握考试重难点?
  4. AI遮天传 DL-多层感知机
  5. hdu 2276【Kiki Little Kiki 2】
  6. PHP 百度图片搜索功能API接口开发
  7. 轮回dj 佛教音乐_童音watmp3.com
  8. vr分类及其常见类型
  9. 我的python爬虫自学之路
  10. 计算机无法自动搜索更新驱动程序,升级后关于硬件驱动的相关问题