手把手带你爬虫 | 爬取起点小说网
菜鸟学Python
共 4646字,需浏览 10分钟
· 2020-12-25
很多同学都喜欢看小说,尤其是程序员群体,对武侠小说,科幻小说都很着迷,最近的修仙的小说也很多,比如凡人修仙传,武动乾坤,斗破苍穹等等,今天分享一个用Python来爬取小说的小脚本!
目标
爬取一本仙侠类的小说下载并保存为txt文件到本地。本例为“大周仙吏”。
项目准备
软件:Pycharm
第三方库:requests,fake_useragent,lxml
网站地址:https://book.qidian.com
网站分析
打开网址:
网址变为:https://book.qidian.com/info/1020580616#Catalog
判断是否为静态加载网页,Ctrl+U打开源代码,Ctrl+F打开搜索框,输入:第一章。
在这里是可以找到的,判定为静态加载。
反爬分析
同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。
代码实现
1.导入相对应的第三方库,定义一个class类继承object,定义init方法继承self,主函数main继承self。
import requests
from fake_useragent import UserAgent
from lxml import etree
class photo_spider(object):
def __init__(self):
self.url = 'https://book.qidian.com/info/1020580616#Catalog'
ua = UserAgent(verify_ssl=False)
#随机产生user-agent
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
def mian(self):
pass
if __name__ == '__main__':
spider = qidian()
spider.main()
2.发送请求,获取网页。
def get_html(self,url):
response=requests.get(url,headers=self.headers)
html=response.content.decode('utf-8')
return html
3.获取图片的链接地址。
import requests
from lxml import etree
from fake_useragent import UserAgent
class qidian(object):
def __init__(self):
self.url = 'https://book.qidian.com/info/1020580616#Catalog'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
def get_html(self,url):
response=requests.get(url,headers=self.headers)
html=response.content.decode('utf-8')
return html
def parse_html(self,html):
target=etree.HTML(html)
links=target.xpath('//ul[@class="cf"]/li/a/@href')#获取链接
names=target.xpath('//ul[@class="cf"]/li/a/text()')#获取每一章的名字
for link,name in zip(links,names):
print(name+'\t'+'https:'+link)
def main(self):
url=self.url
html=self.get_html(url)
self.parse_html(html)
if __name__ == '__main__':
spider=qidian()
spider.main()
打印结果:
4.解析链接,获取每一章内容。
def parse_html(self,html):
target=etree.HTML(html)
links=target.xpath('//ul[@class="cf"]/li/a/@href')
for link in links:
host='https:'+link
#解析链接地址
res=requests.get(host,headers=self.headers)
c=res.content.decode('utf-8')
target=etree.HTML(c)
names=target.xpath('//span[@class="content-wrap"]/text()')
results=target.xpath('//div[@class="read-content j_readContent"]/p/text()')
for name in names:
print(name)
for result in results:
print(result)
打印结果:(下面内容过多,只贴出一部分。)
5.保存为txt文件到本地。
with open('F:/pycharm文件/document/' + name + '.txt', 'a') as f:
for result in results:
#print(result)
f.write(result+'\n')
效果显示:
打开文件目录:
完整代码
import requests
from lxml import etree
from fake_useragent import UserAgent
class qidian(object):
def __init__(self):
self.url = 'https://book.qidian.com/info/1020580616#Catalog'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
def get_html(self,url):
response=requests.get(url,headers=self.headers)
html=response.content.decode('utf-8')
return html
def parse_html(self,html):
target=etree.HTML(html)
links=target.xpath('//ul[@class="cf"]/li/a/@href')
for link in links:
host='https:'+link
#解析链接地址
res=requests.get(host,headers=self.headers)
c=res.content.decode('utf-8')
target=etree.HTML(c)
names=target.xpath('//span[@class="content-wrap"]/text()')
results=target.xpath('//div[@class="read-content j_readContent"]/p/text()')
for name in names:
print(name)
with open('F:/pycharm文件/document/' + name + '.txt', 'a') as f:
for result in results:
#print(result)
f.write(result+'\n')
def main(self):
url=self.url
html=self.get_html(url)
self.parse_html(html)
if __name__ == '__main__':
spider=qidian()
spider.main()
程序员GitHub,现已正式上线! 接下来我们将会在该公众号上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。
推荐阅读:
这个GitHub 1400星的Git魔法书火了,斯坦福校友出品丨有中文版 贼 TM 好用的 Java 工具类库 超全Python IDE武器库大总结,优缺点一目了然! 秋招来袭!GitHub28.5颗星!这个汇聚阿里,腾讯,百度,美团,头条的面试题库必须安利! 收获10400颗星!这个Python库有点黑科技,竟然可以伪造很多'假'的数据! 牛掰了!这个Python库有点逆天了,竟然能把图片,视频无损清晰放大!
点这里,获取一大波福利
评论
21.3K star!推荐一款可视化自动化测试/爬虫/数据采集神器!功能免费且强大!
【温馨提示】由于公众号更改了推送规则,不再按照时间顺序排列,如果不想错过测试开发技术精心准备的的干货文章,请将测试开发技术设为“星标☆”,看完文章在文尾处点亮“在看”!大家好,我是狂师!在大数据时代,信息的获取与分析变得尤为重要。对于开发者、数据分析师乃至非技术人员来说,能够高效地采集网络数据并进行
测试开发技术
4
一篇文章带你了解JavaScript作用域
点击上方“前端进阶学习交流”,进行关注回复“前端”即可获赠前端相关学习资料今日鸡汤杨家有女初长成,养在深闺人未识。在JavaScript中,对象和函数也是变量。在JavaScript中,作用域是你可以访问的变量、对象和函数的集合。JavaScript 有函数作用域: 这个作用域在函数内变化。一、本地
前端进阶学习交流
0
L4 自动驾驶是骗局?华为徐直军:我们起点就瞄准L4
图源:“华为智能汽车解决方案”公众号撰文 | 程子筠编辑 | 神璐璐审核 | 刘玉琳封面 | “华为智能汽车解决方案”公众号泰伯网讯,在第21届华为分析师大会上,华为副董事长、轮值董事长徐直军在演讲中提到:“华为智能驾驶的起点就是瞄准L4的架构和L4的目标,其次向下适配不同车型的
泰伯网
9
一篇文章带你了解JavaScript switch
点击上方“前端进阶学习交流”,进行关注回复“前端”即可获赠前端相关学习资料今日鸡汤舍身而取义者也!Switch是与if ... else ...相同的条件语句,不同之处在于switch语句允许根据值列表测试变量是否相等。switch 语句用于根据不同的条件执行不同的操作。一、Switch 语句使用s
前端进阶学习交流
0
带你玩转Linux系统之lscpu命令
链接:https://bbs.huaweicloud.com/blogs/422603一、lscpu命令介绍lscpu 是一个 Linux 命令,用于显示CPU架构的详细信息。它可以用来查看 CPU 的型号、主频、架构、虚拟化支持等。二、lscpu命令的使用帮助2.1 命令格式lscpu [选项]2
良许Linux
0
10分钟带你上手 Prometheus
原文链接:https://www.cnblogs.com/cjsblog/p/11585145.htmlPrometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能)。 1. 概述1.1. Prometheus是什么?Promethe
DevOps技术栈
1903
这个网络爬虫代码,拿到数据之后如何存到csv文件中去?
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤渚云低暗度,关月冷相随。大家好,我是皮皮。一、前言还是昨天的那个网络爬虫问题,大佬们,帮忙看看这个网络爬虫代码怎么修改?那个粉丝说自己不熟悉pandas,用pandas做的爬虫,虽然简洁
Python爬虫与数据挖掘
4
【NLP】一文带你了解LLAMA(羊驼)系列
作者丨曼城周杰伦 来源丨深蓝AI 编辑丨极市平台导读 本文会重点介绍LLAMA系列的改进点,希望大家通过这一篇文章,能快速地了解LLAMA系列的改进工作。前言:自从OpenAI推出Chat GPT系列后,也标志着自然语
机器学习初学者
10