xpath+多进程爬取全书网纯爱耽美类别的所有小说。
- # 需要的库
- import requests
- from lxml import etree
- from multiprocessing import Pool
- import os
- # 请求头
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
- }
- # 创建存储路径
- pathname = './全书网/'
- if not os.path.exists(pathname):
- os.mkdir(pathname)
- # 获取书籍列表
- def get_booklist(url):
- try:
- response = requests.get(url=url,headers=headers)
- etrees = etree.HTML(response.text)
- sum = etrees.xpath('//a[@class="last"]/text()')[0]
- booklist = etrees.xpath('//ul[@class="seeWell cf"]/li')
- book_list = []
- for books in booklist:
- book = books.xpath('./a/@href')[0]
- book_list.append(book)
- pool.map(get_book,book_list)
- urls = ['http://www.quanshuwang.com/list/3_{}.html'.format(i) for i in range(2,int(sum)+1)]
- pool.map(get_booklist,urls)
- except Exception:
- print('get_booklist failed')
- # 获取具体书籍
- def get_book(url):
- try:
- response = requests.get(url=url, headers=headers)
- etrees = etree.HTML(response.content.decode("gb18030"))
- book_name = etrees.xpath('//div[@class="b-info"]/h1/text()')[0]
- if os.path.exists(pathname+book_name+'.txt'):
- print(book_name+'.书籍已存在,如需重新下载请删除原文件')
- return None
- book = etrees.xpath('//div[@class="b-oper"]/a/@href')[0]
- get_mulu(book)
- except Exception:
- print('get_book failed')
- # 获取书籍目录
- def get_mulu(url):
- try:
- response = requests.get(url=url, headers=headers)
- etrees = etree.HTML(response.text)
- book = etrees.xpath('//div[@class="clearfix dirconone"]/li')
- for i in book:
- book = i.xpath('./a/@href')[0]
- get_content(book)
- except Exception:
- print('get_mulu failed')
- # 获取并写入书籍内容
- def get_content(url):
- try:
- response = requests.get(url=url, headers=headers)
- etrees = etree.HTML(response.content.decode("gb18030"))
- title = etrees.xpath('//a[@class="article_title"]/text()')[0]
- zhangjie = etrees.xpath('//strong[@class="l jieqi_title"]/text()')[0]
- contents = etrees.xpath('//div[@class="mainContenr"]/text()')
- content = ''.join(contents)
- with open(pathname+title+'.txt','a+',encoding='utf-8') as f:
- f.write(zhangjie+'\n\n'+content+'\n\n')
- print('正在下载:',zhangjie)
- except Exception:
- print('get_content failed')
- # 程序入口
- if __name__ == '__main__':
- url = 'http://www.quanshuwang.com/list/3_1.html'
- # 创建进程池
- pool = Pool()
- # 启动程序
- get_booklist(url)
控制台输出
- 正在下载: 章 节目录 第三十四章 不眠的天堂
- 正在下载: 章 节目录 第四十四章 :耳光
- 正在下载: 章 节目录 第046章 找到变异元晶
- 正在下载: 章节目录 第二十八章 修路优惠
- 正在下载: 章 节目录 第四十五章 :憋屈
- 正在下载: 章 节目录 第047章 至宝得手
- 正在下载: 章节目录 第二十九章 猜鱼
- 正在下载: 章 节目录 第048章 凤凰涅槃,浴火重生。
- 正在下载: 章节目录 第三十章 养猪场
- 正在下载: 章 节目录 第四十六章 :酣畅淋漓
- 正在下载: 章 节目录 第049章 上等天赋资质
- 正在下载: 章节目录 第三十一章 上鬼身
- 正在下载: 章 节目录 第050章 元力神兵
- 正在下载: 章 节目录 第四十七章 :舵主之位
- 正在下载: 章 节目录 第三十五章 黑暗
- 正在下载: 章节目录 第三十二章 吓死马有钱
- 正在下载: 章 节目录 第三十六章 商议
- 正在下载: 章 节目录 第051章 天级上品龙隐术
- 正在下载: 章 节目录 第三十七章 寻觅
- 正在下载: 章节目录 第三十三章 再遇李三
- 正在下载: 章节目录 第三十四章 借了一百万
打开文件夹查看是否下载成功
done。
xpath+多进程爬取全书网纯爱耽美类别的所有小说。的更多相关文章
- xpath+多进程爬取八零电子书百合之恋分类下所有小说。
代码 # 需要的库 import requests from lxml import etree from multiprocessing import Pool import os # 请求头 he ...
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- Python爬虫爬取全书网小说,程序源码+程序详细分析
Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...
- 使用Xpath+多进程爬取诗词名句网的史书典籍类所有文章。update~
上次写了爬取这个网站的程序,有一些地方不完善,而且爬取速度较慢,今天完善一下并开启多进程爬取,速度就像坐火箭.. # 需要的库 from lxml import etree import reques ...
- xpath+多进程爬取网易云音乐热歌榜。
用到的工具,外链转换工具 网易云网站直接打开源代码里面并没有对应的歌曲信息,需要对url做处理, 查看网站源代码路径:发现把里面的#号去掉会显示所有内容, 右键打开的源代码路径:view-source ...
- 使用scrapy框架爬取全书网书籍信息。
爬取的内容:书籍名称,作者名称,书籍简介,全书网5041页,写入mysql数据库和.txt文件 1,创建scrapy项目 scrapy startproject numberone 2,创建爬虫主程序 ...
- 利用xpath爬取招聘网的招聘信息
爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...
- Scrapy爬虫(5)爬取当当网图书畅销榜
本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下: 我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...
- Python爬虫项目--爬取自如网房源信息
本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...
随机推荐
- 使用自定义注解和AOP管理shiro权限
一.场景 在使用shiro框架的时候,遇到了这样的需求:本系统有多个用户,每个用户分配不同角色,每个角色的权限也不一致.比如A用户拥有新闻列表的增删改查权限,而B用户只有查看新闻列表的权限,而没有删除 ...
- linux驱动开发学习二:创建一个阻塞型的字符设备
在Linux 驱动程序中,可以使用等待队列来实现阻塞进程的唤醒.等待队列的头部定义如下,是一个双向列表. struct list_head { struct list_head *next, *pre ...
- jstree:重新加载数据集,刷新树
true:表示获得一个已经存在的jstree实例 $('#tree').jstree(true).destroy();// 清除树节点 // 重新设置树的JSON数据集 $('#tree').jstr ...
- 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……
最近,在打开下载的office文档(包括word.excel.ppt等)时候,总是无法直接打开,错误提示如下: 无论是邮件中的还是别的网站下载的,均提示该错误.后来搜索相关资料发现,修改其文件属性即可 ...
- Spring Boot 的Logback
Spring Boot 默认使用Logback记录日志 Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入 日志级别从高到低:TR ...
- mysql 5.7开启sql日志的配置
今天把数据库换成了5.7的,想查通过sql日志定位下问题,但是发现和以前的方式不一样了,特意记录下来 通过开启mysql的日志功能,可以记录所有别执行过的sql语句记录,便于维护数据库数据. 在数据库 ...
- 在Django中显示操作数据库的语句
需要在配置中加上这个 LOGGING = { 'version':1, 'disable_existing_loggers':False, 'handlers':{ 'console':{ 'leve ...
- PHP写接口需要注意的问题
PHP写接口需要注意的问题方法前面建议写传过来的参数 1 防止xss攻击2 防止sql语句注入3 sign签名验证4 不经常更新的加索引和缓存 app请求时候 参数都要加urlencode 防止参数带 ...
- 配置git diff和git merge使用的第三方工具
一般在运行git merge branchName后,git 如果提示了merger冲突,然后运行git mergetool.Git提示冲突后,运行git mergetool --tool-help ...
- docker 学习总结
Docker 是一个容器工具,提供虚拟环境.解决了软件的环境配置和依赖问题,让软件可以带环境和依赖的安装. Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容 ...