一、简介

网络爬虫,也叫网络蜘蛛(Web Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。比如:www.baidu.com,它就是一个URL,在讲解爬虫内容之前,我们需要先学习一项写爬虫的必备技能:审查网页(html)元素。

不过多介绍审查网页元素内容,只需打开网页,鼠标右键,点击审查或者按F12

二、背景

网络爬虫的第一步就是根据URL,获取网页的HTML信息。在Python3中,可以使用urllib.requestrequests进行网页爬取。

  • urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库。
  • requests库是第三方库,需要我们自己安装。
  • pip   install  requests
  • 解析html网页使用Beautiful Soup,解析HTML信息,提取我们感兴趣的内容。对于本小节的实战,我们感兴趣的内容就是文章的正文。提取的方法有很多,例如使用正则表达式、Xpath、Beautiful Soup等。对于初学者而言,最容易理解,并且使用简单的方法就是使用Beautiful Soup提取感兴趣内容。
  • pip install beautifulsoup4

requests库的开发者为我们提供了详细的中文教程,查询起来很方便。本文不会对其所有内容进行讲解,摘取其部分使用到的内容,进行实战说明。

三、实战

本文举例,仅供测试使用,并没有商业用途,地址:地址

完整代码如下:

# model
# param
# auth:lizhi.guo
# time:2022/5/16 16:37
import requests
from bs4 import BeautifulSoupclass spliderBQKarticleYNYH(object):def __init__(self):self.server = 'https://www.bqkan8.com'self.target = 'https://www.bqkan8.com/1_1094/'self.pathPre="D:\\openCVImage\\splider\\"self.suff = ".txt"self.names=[]self.urls=[]def getDownLoadUrls(self):req = requests.get(self.target)req.encoding = 'gbk'html = req.textbf = BeautifulSoup(html)#通过审查元素,我们发现可以发现,这些章节目录都存放在了class属性为listmain的div标签下,选取部分html代码如下div = bf.find_all('div', class_='listmain')a_bf = BeautifulSoup(str(div[0]))#我们看到每个章节的名字存放在了<a>标签里面。<a>标签还有一个href属性。这里就不得不提一下<a> 标签的定义了,# <a> 标签定义了一个超链接,用于从一张页面链接到另一张页面。<a> 标签最重要的属性是 href 属性,它指示链接的目标。#<a> 标签中href属性存放的属性值/1_1094/5403177.html是章节URLhttp://www.biqukan.com/1_1094/5403177.html的后半部分。# 其他章节也是如此!那这样,我们就可以根据<a> 标签的href属性值获得每个章节的链接和名称了。#总结一下:小说每章的链接放在了class属性为listmain的<div>标签下的<a>标签中。链接具体位置放在html->body->div->dl->dd->a的href属性中。# 先匹配class属性为listmain的<div>标签,再匹配<a>标签a = a_bf.find_all('a')#因为find_all返回的是一个列表,里边存放了很多的<a>标签,所以使用for循环遍历每个<a>标签并打印出来,按需打印,排除其它a标签for aobj in a[13:1332]:sContext = aobj.stringself.names.append(sContext)ahref = self.server + aobj.get('href')self.urls.append(ahref)def getBQKarticleYNYHContent(self,url):req = requests.get(url=url)req.encoding = 'gbk'html = req.textbf = BeautifulSoup(html)#创建一个Beautiful Soup对象。BeautifulSoup函数里的参数就是我们已经获得的html信息。然后我们使用find_all方法,# 获得html信息中所有class属性为showtxt的div标签。find_all方法的第一个参数是获取的标签名,第二个参数class_是标签的属性texts = bf.find_all('div', class_='showtxt')#find_all匹配的返回的结果是一个列表。提取匹配结果后,使用text属性,提取文本内容,滤除br标签。随后使用replace方法,# 剔除空格,替换为回车进行分段。&nbsp;在html中是用来表示空格的。replace('\xa0'*8,'\n\n')就是去掉下图的八个空格符号,并用回车代替:content = texts[0].text.replace('\xa0' * 8, '\n\n')orgHref = "(" + url + ")"#踢除其它不需要的内容content = content.replace(orgHref, "").replace("请记住本书首发域名:www.bqkan8.com。笔趣阁手机版阅读网址:m.bqkan8.com", "").replace("章节错误,点此举报(免注册)我们会尽快处理.举报后请耐心等待,并刷新页面。", "")return content#输出到文件,按照每个章节输出,有多少章节就输出多少个文件def writeFile(self,name,content):filePath = self.pathPre + name + self.sufffile = open(filePath, 'w', encoding='utf-8')file.write(content)if __name__ == "__main__":dlclass= spliderBQKarticleYNYH();dlclass.getDownLoadUrls()for i in range(len(dlclass.names)):sContext = dlclass.getBQKarticleYNYHContent(dlclass.urls[i])dlclass.writeFile(dlclass.names[i],sContext)

四、实战截图

1、

五、问题记录

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 问题解决办法之一

   在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:

file = open(filePath, 'w', encoding='utf-8')

声明:本文采用的素材,均是实验所用,均仅用于学习交流,没有任何商业用途。

欢迎进群学习交流:856044792

Python 使用requests实现网络小说爬虫案例(一)相关推荐

  1. Android 本地网络小说爬虫,基于 jsoup 及 xpath

    CrawlerForReader 项目地址:smuyyh/CrawlerForReader  简介:Android 本地网络小说爬虫,基于 jsoup 及 xpath 更多:作者   提 Bug 标签 ...

  2. Android 本地网络小说爬虫,基于 jsoup 及 xpath,Android入门教程

    项目地址:smuyyh/CrawlerForReader  简介:Android 本地网络小说爬虫,基于 jsoup 及 xpath 更多:作者   提 Bug 标签: Android 本地网络小说爬 ...

  3. Python带进度条的小说爬虫(笔趣网爬小说—简约版)

    Python带进度条的小说爬虫(笔趣网爬小说-简约版) 准备: BeautifulSoup.selenium.PhantomJS 注意PhantomJS安装方式 这里附上安装方式连接: https:/ ...

  4. 聚焦千千小说:一篇幽默风趣的网络小说爬虫教程

    聚焦千千小说:一篇幽默风趣的网络小说爬虫教程 大家好!欢迎来到我的博客.今天,我要给你们带来一份超有趣.简单易懂的爬虫教程.我们的目标是爬取千千小说网站上的小说章节内容(而且能够实现章节的顺序排放哦) ...

  5. Python3——网络小说爬虫

    爬虫步骤回顾: 根据前两篇文章,我们理解了爬虫的各个过程,简单回顾下: 爬虫第一步:根据URL获取网页的HTML信息: Python3中可以通过urllib.request或者requests进行网页 ...

  6. 用Python编写自动下载网络小说的脚本

    很多网站都有长篇连载或是分章节的小说可供在线阅读,但如果想要将所有章节下载下来并整理成一个格式良好的文本文件,则是很费功夫的.幸好可以用Python脚本来自动完成所有的工作.下面的两个脚本,将用来演示 ...

  7. python爬取新闻网站内容_python爬虫案例:抓取网易新闻

    此文属于入门级级别的爬虫,老司机们就不用看了. 本次主要是爬取网易新闻,包括新闻标题.作者.来源.发布时间.新闻正文. 首先我们打开163的网站,我们随意选择一个分类,这里我选的分类是国内新闻.然后鼠 ...

  8. 基于Python的空气质量网络数据爬虫,构建面向深度学习数据预测的空气质量数据集

    目录 1.目标 2. 思路 3.算法 3.1 算法流程 3.2 开发环境 4 核心代码 4.1 Header伪装 4.2 get_html_soup函数 4.3 get_city_link_list函 ...

  9. python爬取携程网游记_Python爬虫案例:爬取携程评论

    前言 之前爬取美团,马蜂窝等网站的数据都挺顺利,大众点评(这个反爬机制有点麻烦)在磕磕绊绊中也算成功(重点是网页页数的变化和关键字的隐藏替换)但携程居然遇到了瓶颈. 主要是查看源代码时发现关键商户信息 ...

最新文章

  1. leetcode-155 最小栈
  2. JavaScript函数大全
  3. P2197 【模板】nim游戏
  4. linux rpm 没有返回,容易忘记的linux命令之rpm
  5. C++对于大型图片的加载缩放尝试
  6. UDP发字节,接收字节
  7. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration的解决
  8. numpy.ndarray.flat/flatten 与 Spark 下的 flatMap
  9. java方法重载与返回值类型无关
  10. TP5.1导出指定的多个日期的数据记录
  11. 最大流算法之Dinic
  12. Android筑基——深入理解 LayoutInflater.inflate() 方法
  13. 大数据挖掘步骤都包括哪些?
  14. 中兴新支点操作系统_中兴新支点系统预装测试
  15. 这些月薪过万的公司你准备好了吗
  16. ubuntu20.04下内核源码下载分析
  17. 纯前端项目文件部署到远程服务器
  18. 管理经济学 知识点总结(一)
  19. Leetcode学习之贪心算法
  20. 第34课:彻底解密Spark 2.1.X中Shuffle 中SortShuffleWriter排序源码内幕解密

热门文章

  1. 电商B2C商铺新用户复购预测(一)
  2. 马云的“平头哥”芯片公司,会比董明珠的格力芯片厉害吗?
  3. 临汾第一站软件工作室网站建成运行……
  4. MySQL 1075错误
  5. Linux学习高手写给初学者的经验谈
  6. 2015第六届蓝桥杯 C/C++C组真题及题解
  7. Java之类的定义和实例化类
  8. 如何解决打印CAD图纸不完整,有部分打印不出来
  9. Android平板如何玩windows,高手教你如何使用安卓平板远程控制PC电脑
  10. JAVA应用程序转换为Applet