python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说...
由于本人也是初学者,算是小白一枚,这里跟大家分享一下爬取网站上的小说的过程。
第一步我们需要导入我们需要的模块,比如requests,BeautifulSoup,还有正则模块re。
代码如下:import re
import requests
from bs4 import BeautifulSoup
然后我们需要找到我们需要爬取的网站,这里我随便选取了一个小说网站:
http://www.tianxiabachang.cn
接下来就是我们需要爬出小说的html,随便在这个网站找到了一本小说,就比如说《某某悍刀行》吧。url = 'http://www.tianxiabachang.cn/7_7568/'
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
这样,这就是我们获取到了这个小说网页的源码html。
但是很多时候网站都会有一定的反爬虫机制,访问几次之后我们所在的IP就会被封锁,所以我们就需要做一个简单的反反爬虫操作,那就是给你的get请求加上header,这个header可以在目标网页上找到。
某网站某地址的源
比如这个就是之前我们网页的源码,(可以摁键盘上的F12或者右击鼠标点击检查,找到之后可以刷新一次)我们需要的是Request Headers下面的User-Agent,我们复制过来,然后就成了下面的情况。
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
直到目前为止我们爬取了《某某悍刀行》的目录所在页的html了。
下一步就是找到我们爬取到的html,来进行正则处理,找到我们需要的从第一章到最后一章的所有内容soup = BeautifulSoup(html,'html.parser')
one = soup.find("div",attrs={"id":"list"})
这样我们就得到了部分我们需要的内容:
根据这个图片,我们可以从当中写出正则表达式:pattern1 = re.compile('
',re.S)
pattern2 = re.compile('html">(.*?)
',re.S)
get_url = re.findall(pattern1, str(one))
get_title = re.findall(pattern2, str(soup))
其中的pattern1 就是对文中的目录下面的网址进行的正则表达式,选取到的是7_7568(这个代表在这个网页下面的《雪中悍刀行》这本书的代码)下面的3226什么开头的数字。
而pattern2 就是网址后面的章节标题的正则表达式。
下图就是我们正则到的内容:
很明显的可以看到,前面的这些章节都是番外内容,跟我们一般看小说看的前后顺序明显不同,所以我们可以把这些不需要的删掉,直接从第一章 “小二上酒”我们爬取:for i in range(41):
del get_url[0]
del get_title[0]
接下来我们创建一个当前文件夹下的一个txt文件来保存我们爬取的东西:
with open('雪中悍刀行.txt', 'a', newline='', encoding='UTF-8-sig') as txtfile:
for i in range(len(get_url)):
reallurl = url + str(get_url[i])
# print(reallurl)
response1 = requests.get(reallurl, headers=re_header)
response1.encoding = 'utf-8'
html1 = response1.text
其中的**‘a’**是代表我们不覆盖录入,不加newline=’'的话,有可能会每个一行留一行的空白,encoding是对数据进行编码。
然后我们做了一个for循环,通过这个循环我们能重复操作,反复访问,每一章的网址下面的html,所以html1就成了每一章的html。
这个就是我们得到的一章的内容,我们对这个进行BeautifulSoup处理,因为我们只需要下面的这个东西,所以,我们这么操作:soup1 = BeautifulSoup(html1, "html.parser")
one = soup1.find("div",attrs={"id":"content"})
得到的one就是我们需要的每一章小说:
然后把我们得到的数据,保存到txt文件中就行:txtfile.write(str(get_title[i]) + "\n")
txtfile.write(str(one) + "\n")
以下就是全部代码,欢迎大家斧正!(我也保留了写代码时候的各种操作,大家是不是有相同的情况呢2333)
(第一次写,有什么不好的,大家留点情555)
from urllib.request import urlretrieve
import requests
import os
import re
from bs4 import BeautifulSoup
# url = 'http://www.xbiquge.la/13/13959/'
re_header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
# url = 'http://www.tianxiabachang.cn/7_7568/3226399.html'
url = 'http://www.tianxiabachang.cn/7_7568/'
response = requests.get(url,headers = re_header)
response.encoding = 'utf-8'
html = response.text
soup = BeautifulSoup(html,'html.parser')
one = soup.find("div",attrs={"id":"list"})
# print(one)
pattern1 = re.compile('
',re.S)
pattern2 = re.compile('html">(.*?)
',re.S)
get_url = re.findall(pattern1, str(one))
get_title = re.findall(pattern2, str(soup))
# print(get_url)
# print(get_title)
#
for i in range(41):
del get_url[0]
del get_title[0]
# print(len(get_url), len(get_title))
#
with open('雪中悍刀行.txt', 'a', newline='', encoding='UTF-8-sig') as txtfile:
for i in range(len(get_url)):
reallurl = url + str(get_url[i])
# print(reallurl)
response1 = requests.get(reallurl, headers=re_header)
response1.encoding = 'utf-8'
html1 = response1.text
# print(html1)
soup1 = BeautifulSoup(html1, "html.parser")
one = soup1.find("div",attrs={"id":"content"})
# print(one)
# pattern3 = re.compile('
(.*?)
')
# endtxt = re.findall(pattern3, html1)
# print(html1)
# print(endtxt)
txtfile.write(str(get_title[i]) + "\n")
txtfile.write(str(one) + "\n")
print('下载第',i+1 ,'章完成')
这就是python文件正在运行中,爬取一章一章的内容。
祝大家学业有成升职加薪,谢谢,谢谢
python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说...相关推荐
- python体育竞技分析代码200行_使用Python进行体育竞技分析(预测球队成绩)
使用Python进行体育竞技分析(预测球队成绩) 发布时间:2020-09-18 06:38:27 来源:脚本之家 阅读:69 今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析 ...
- python猜数字游戏代码多次_黄哥Python:猜数字游戏代码
猜数字游戏,电脑随机生存一个[1, 100] 之间的正整数,人输入一个数字,输出大了,还是小了,猜对了,就退出游戏.由于初学者没有学异常,所以没有采用异常. """ 猜数 ...
- 如何使用python编程抢京东优惠券 知乎_学好Python爬取京东知乎价值数据
原标题:学好Python爬取京东知乎价值数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这 ...
- python爬取知乎话题广场_学习python爬虫---爬虫实践:爬取B站排行榜2(爬取全部分类排行榜、利用pygal库作图)...
前面我们爬取了B站上全站的排行榜,详细见:魏勇:学习python爬虫---爬虫实践:爬取B站排行榜zhuanlan.zhihu.com 一.爬取全部分类排行榜 我们观察一下B站排行榜,那里还有番剧排 ...
- python获取网页数据对电脑性能_【Python】网页数据爬取实战
由于网页结构跟之前有变化,还不是很熟悉.代码待完善,问题记录: 腾讯新闻二级网页内容爬取有问题. 链家网站头文件没有用到. 爬取一条腾讯视频的header内容,存入txt.要求: 包含网页链接 包含t ...
- beautifulsoup爬取网页中的表格_用 Python 爬取网页
来自公众号:优达学城Udacity 作者:Kerry Parker 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑 ...
- python为啥爬取数据会有重复_利用Python来爬取“吃鸡”数据,为什么别人能吃鸡?...
原标题:利用Python来爬取"吃鸡"数据,为什么别人能吃鸡? 首先,神装镇楼 背景 最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波 ...
- python获取get请求的耗时时间_突破python爬取极限,超牛逼的异步协程爬虫
异步协程 1. event_loop 2. coroutine 中文翻译叫协程,在 Python 中昌指代为协程对象类型,可以将协程对象注册到时间循环中被调用.使用 async 关键字来定义的方法在调 ...
- python爬虫爬取网易云音乐歌曲_如何用爬虫获取网易云音乐歌单中的歌曲?
--------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...
最新文章
- [USACO5.3]校园网Network of Schools 缩点
- Android本地存储键值对,flutter本地存储键值对简单数据(相当于web的localstorage) 代码实现...
- android编程绘图,Android编程绘图操作之弧形绘制方法示例
- Github 15K! 亿级向量相似度检索库Faiss 原理+应用
- element ui缩小行高
- matlab 神经网络工具箱的实用
- 苦于E63没有秒表,网上找的不好用,就自己写个简单的
- 阻止电脑自动安装软件_一套连招彻底阻止流氓软件静默安装
- JAVA下载安装教程(Java SE Development Kit 8u40)
- Matlab2016a 安装
- Layui treeTable相关
- python是一门胶水语言_Python是唯一被称为“胶水语言”的编程语言?事实并非如此!...
- Meson构建系统(一)
- Azure NSG Flow Log 引发的自嗨 -- 日志查询分析
- 史玉柱正式退休:把互联网留给年轻人
- Keil5 平台 S3C2440裸机程序开发-----中断系统/UART
- svg 使用path实现圆角效果
- 广义表的头尾链表存储表示(第五章 P115 算法5.5,5.6,5.8)
- 机器学习课后题——贝叶斯
- 【洛谷】P1067 多项式输出【模拟】
热门文章
- C# 正则表达式验证
- LeetCode Binary Tree Level Order Traversal
- could not open C:\Program Files\Java\jdk1.6.0-11\lib\i386\jvm.cfg
- WCF开发框架形成之旅--WCF应用常见问题处理
- dev-c++官网位置和源码/库位置
- java byte char io流_吃透Java IO:字节流、字符流、缓冲流
- 屏幕坏点检测图片_电视屏幕出现坏点怎么办?
- 内存泄漏MobX State Tree_[译]iOS Crash Dump Analysis 错误的内存崩溃
- 第一批鸿蒙系统手机型号,鸿蒙2.0第一批机型名单正式披露!花粉却感叹:华为不够厚道!...
- HTML字体怎么显示,教你如何用CSS来控制网页字体的显示样式