起点中文网爬虫实战requests库以及xpath的应用
起点中文网爬虫实战requests库以及xpath的应用
知识梳理:
本次爬虫是一次简单的复习应用,需要用到requests库以及xpath.
在开始爬虫之前,首先需要导入这两个库
import requests
from lxml import etree
首先制定爬虫框架
import requests
from lxml import etree
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
def parse_url(url): #爬取网页章节列表pass
def parse_list(response):#处理章节列表内容并获取各个章节的具体urlpass
def parse_detail(url):#爬取每个章节的详细内容并加以处理pass
def save_text(ls,title,base_title):#保存最终结果到txt文件中,pass
def main():base_url = input("请输入小说首页的IP地址:")response = parse_url(base_url)detail_urls = parse_list(response)base_title = input("请输入小说名称:")for detail_url in detail_urls:text_ls,title = parse_detail(detail_url)save_text(text_ls,title,base_title)
if __name__ == '__main__':main()
页面内容分析
因为我要爬取一部小说的全部章节的内容,首先随便打开一部小说,进入到主要章节目录,用Chrome浏览器的网页分析查看网页结构内容,
分析之后可以发现,所有的章节URL都在 li 标签之下的 a 标签的 href 属性里面,并且所有的 li 标签又都在class="cf"的 ul 标签下面,搜索发现,整个网页只有一个这样的 ul 标签,接下来可以开始处理章节列表内容
def parse_url(url):response = requests.get(url,headers=headers)return response.content
def parse_list(response):ls = []html = etree.HTML(response)lis = html.xpath('//ul[@class="cf"]/li')for li in lis:href = li.xpath('.//a/@href')[0]href = "https:"+hrefls.append(href)return ls
首先分析详情章节页面的title,也就是章节的标题,到时候可以拿下来作为文件存取时候的章节区分,分析页面可以看到
章节标题位于class="content-wrap"的 span 标签下面,再次分析详细内容,发现详细内容位于class="read-content j_readContent"的div标签下的p标签下,分析完成之后可以编写接下来的过程了。
def parse_detail(url):ls = []response = requests.get(url,headers=headers).contenthtml = etree.HTML(response)texts = html.xpath('//div[@class="read-content j_readContent"]//p/text()')title = html.xpath('//span[@class="content-wrap"]/text()')[0]for text in texts:text = text.strip()+'\n'ls.append(text)return ls,title
最后是文件保存,
def save_text(ls,title,base_title):file_name = base_title+title+".txt"with open(file_name,'w',encoding='utf-8') as fp:fp.write(title+'\n\n')for i in ls:fp.write(i)print("file {} complete".format(file_name))
编写完成之后尝试运行,
效果还是可以的,不过还是有着很大的缺陷,进一步的学习能够更好的完成这个工作。完整代码如下:
import requests
from lxml import etree
import time
# https://read.qidian.com/chapter/_O7kFXJAAns8kjk6dUsm_A2/Y_96UVhhOa6aGfXRMrUjdw2
# https://read.qidian.com/chapter/_O7kFXJAAns8kjk6dUsm_A2/BqHrIuEKr7bM5j8_3RRvhw2
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
def parse_url(url):response = requests.get(url,headers=headers)return response.content
def parse_list(response):ls = []html = etree.HTML(response)lis = html.xpath('//ul[@class="cf"]/li')for li in lis:href = li.xpath('.//a/@href')[0]href = "https:"+hrefls.append(href)return ls
def parse_detail(url):ls = []response = requests.get(url,headers=headers).contenthtml = etree.HTML(response)texts = html.xpath('//div[@class="read-content j_readContent"]//p/text()')title = html.xpath('//span[@class="content-wrap"]/text()')[0]for text in texts:text = text.strip()+'\n'ls.append(text)return ls,title
def save_text(ls,title,base_title):file_name = base_title+title+".txt"with open(file_name,'w',encoding='utf-8') as fp:fp.write(title+'\n\n')for i in ls:fp.write(i)print("file {} complete".format(file_name))
def main():base_url = input("请输入小说首页的IP地址:")response = parse_url(base_url)detail_urls = parse_list(response)base_title = input("请输入小说名称:")for detail_url in detail_urls:text_ls,title = parse_detail(detail_url)save_text(text_ls,title,base_title)# time.sleep(1)
if __name__ == '__main__':main()
起点中文网爬虫实战requests库以及xpath的应用相关推荐
- python爬虫——使用requests库和xpath爬取猎聘网职位详情
文章目录 前言 一.页面分析 1.职位列表页面分析 2.职位详情页面URL获取 3.职位详情页面分析 至此,所有页面解析完毕,开始写代码. 二.代码编写 1.导入相应库 2.设置代理和随机请求头 3. ...
- 淘宝爬虫实战---requests库实现模拟登陆模块
淘宝网---爬虫 (一).requests库实现淘宝网模拟登陆 最近想要写一个淘宝网的爬虫,具备模拟登陆.代理IP池.根据关键词爬取搜索页面商品数据,第一个目标就是淘宝的模拟登陆,不得不说,淘宝的用户 ...
- Python之起点中文网爬虫
Python之起点中文网爬虫 注:请勿用于其他用途,仅供学习使用 import requests import re import os from lxml import etreehead = {& ...
- python爬虫基础-requests库
python爬虫基础-requests库 python爬虫 1.什么是爬虫? 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 注意:浏览器抓取的数据对应的页面是一个完整的页面. 为什 ...
- 煎蛋网妹子图爬虫(requests库实现)
煎蛋网妹子图爬虫(requests库实现) 文章目录 煎蛋网妹子图爬虫(requests库实现) 一.前言 环境配置 二.完整代码 一.前言 说到煎蛋网爬虫,相比很多人都写过,我这里试着用reques ...
- python的requests库的添加代理_python爬虫之requests库使用代理
python爬虫之requests库使用代理 发布时间:2020-03-25 17:00:54 来源:亿速云 阅读:110 作者:小新 今天小编分享的是关于python爬虫的requests库使用代理 ...
- python爬虫requests实战_Python爬虫之requests库网络爬取简单实战
实例1:直接爬取网页 实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页 实例3 : 分析请求参数,构造请求参数爬取所需网页 实例4: 爬取图片 实例5: 分析请求参数,构造请求参数爬取 ...
- python爬虫requests库_python爬虫使用Requests库 - pytorch中文网
在入门教程中我们介绍了urllib库和urllib2的用法,同时我们了解一些爬虫的基础以及对爬虫有了基本的了解.其实在我们生产环境中,使用Request库更加方便与实用,同时我们这需要短短的几行代码就 ...
- python爬虫中requests库和正则表达式之淘宝爬虫实战
#python版本基于2.7 使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正 ...
最新文章
- pyrender 安装
- 以太坊 p2p Server 原理及实现
- CodeForces - 833B The Bakery
- sql 取重复key中的第一条_SQL每日一题
- Cell重磅综述:关于人类转录因子,你想知道的都在这
- Tomcat映射虚拟目录的三种方式(2021版)
- 分布式事务slides
- 关于支付回调的一些思考
- springboot+vue+element+mybatisplus项目(后端)
- 将图片转化为txt文本显示
- JSONObject对象和JSONArray对象的使用
- 记录Java学习书籍
- 经方的魅力第二版》读书摘录
- 文件服务器要备案么,icp备案一定要云服务器吗
- 只因为给我打了0.1分,重新撸了个记账小程序
- 武大计算机专业薪酬,2018大学毕业生薪酬排行榜公布:武大输给华科,更意想不到的高校是它...
- Linux下干净卸载mysql详解
- react-native 拨打电话
- 2016年中国信息无障碍十大进展
- 脱离圈套:“你希望与什么样的上级共事?”
热门文章
- IEEE导入参考文献到Endnote
- 真的都是黑幕么?普通学生考研还有机会逆袭么?
- 获取sql server与年、季度、月、周首尾有关的时间函数
- c++11 智能指针-辅助类 (std::bad_weak_ptr)
- 不可多得的干货!mysqlerror2003
- 书籍 沉浸室学习方法_小学生必须掌握的60种科学学习方法(“情境+故事+方法”的沉浸式学习模式。在故事情境下掌握学习方法的养成书。)...
- awd php,AWD模式下的各类PHP木马
- AI 与自动化:更多的自动化,全新的自动化方式?
- 【2023注册测绘师资格考试综合能力攻略】条件方程数量的计算专题
- 阿尔·里斯-市场营销的22条法则(22条商规)-16