由于本人也是初学者,算是小白一枚,这里跟大家分享一下爬取网站上的小说的过程。

第一步我们需要导入我们需要的模块,比如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的使用)爬取网络小说...相关推荐

  1. python体育竞技分析代码200行_使用Python进行体育竞技分析(预测球队成绩)

    使用Python进行体育竞技分析(预测球队成绩) 发布时间:2020-09-18 06:38:27 来源:脚本之家 阅读:69 今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析 ...

  2. python猜数字游戏代码多次_黄哥Python:猜数字游戏代码

    猜数字游戏,电脑随机生存一个[1, 100] 之间的正整数,人输入一个数字,输出大了,还是小了,猜对了,就退出游戏.由于初学者没有学异常,所以没有采用异常. """ 猜数 ...

  3. 如何使用python编程抢京东优惠券 知乎_学好Python爬取京东知乎价值数据

    原标题:学好Python爬取京东知乎价值数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这 ...

  4. python爬取知乎话题广场_学习python爬虫---爬虫实践:爬取B站排行榜2(爬取全部分类排行榜、利用pygal库作图)...

    前面我们爬取了B站上全站的排行榜,详细见:魏勇:学习python爬虫---爬虫实践:爬取B站排行榜​zhuanlan.zhihu.com 一.爬取全部分类排行榜 我们观察一下B站排行榜,那里还有番剧排 ...

  5. python获取网页数据对电脑性能_【Python】网页数据爬取实战

    由于网页结构跟之前有变化,还不是很熟悉.代码待完善,问题记录: 腾讯新闻二级网页内容爬取有问题. 链家网站头文件没有用到. 爬取一条腾讯视频的header内容,存入txt.要求: 包含网页链接 包含t ...

  6. beautifulsoup爬取网页中的表格_用 Python 爬取网页

    来自公众号:优达学城Udacity 作者:Kerry Parker 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑 ...

  7. python为啥爬取数据会有重复_利用Python来爬取“吃鸡”数据,为什么别人能吃鸡?...

    原标题:利用Python来爬取"吃鸡"数据,为什么别人能吃鸡? 首先,神装镇楼 背景 最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波 ...

  8. python获取get请求的耗时时间_突破python爬取极限,超牛逼的异步协程爬虫

    异步协程 1. event_loop 2. coroutine 中文翻译叫协程,在 Python 中昌指代为协程对象类型,可以将协程对象注册到时间循环中被调用.使用 async 关键字来定义的方法在调 ...

  9. python爬虫爬取网易云音乐歌曲_如何用爬虫获取网易云音乐歌单中的歌曲?

    --------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...

最新文章

  1. [USACO5.3]校园网Network of Schools 缩点
  2. Android本地存储键值对,flutter本地存储键值对简单数据(相当于web的localstorage) 代码实现...
  3. android编程绘图,Android编程绘图操作之弧形绘制方法示例
  4. Github 15K! 亿级向量相似度检索库Faiss 原理+应用
  5. element ui缩小行高
  6. matlab 神经网络工具箱的实用
  7. 苦于E63没有秒表,网上找的不好用,就自己写个简单的
  8. 阻止电脑自动安装软件_一套连招彻底阻止流氓软件静默安装
  9. JAVA下载安装教程(Java SE Development Kit 8u40)
  10. Matlab2016a 安装
  11. Layui treeTable相关
  12. python是一门胶水语言_Python是唯一被称为“胶水语言”的编程语言?事实并非如此!...
  13. Meson构建系统(一)
  14. Azure NSG Flow Log 引发的自嗨 -- 日志查询分析
  15. 史玉柱正式退休:把互联网留给年轻人
  16. Keil5 平台 S3C2440裸机程序开发-----中断系统/UART
  17. svg 使用path实现圆角效果
  18. 广义表的头尾链表存储表示(第五章 P115 算法5.5,5.6,5.8)
  19. 机器学习课后题——贝叶斯
  20. 【洛谷】P1067 多项式输出【模拟】

热门文章

  1. C# 正则表达式验证
  2. LeetCode Binary Tree Level Order Traversal
  3. could not open C:\Program Files\Java\jdk1.6.0-11\lib\i386\jvm.cfg
  4. WCF开发框架形成之旅--WCF应用常见问题处理
  5. dev-c++官网位置和源码/库位置
  6. java byte char io流_吃透Java IO:字节流、字符流、缓冲流
  7. 屏幕坏点检测图片_电视屏幕出现坏点怎么办?
  8. 内存泄漏MobX State Tree_[译]iOS Crash Dump Analysis 错误的内存崩溃
  9. 第一批鸿蒙系统手机型号,鸿蒙2.0第一批机型名单正式披露!花粉却感叹:华为不够厚道!...
  10. HTML字体怎么显示,教你如何用CSS来控制网页字体的显示样式