超详细的python爬虫案例,一次爬取上百篇文章

一次爬多篇文章,逻辑是先从主网址爬到每篇文章的网址,再从各个网址处爬取文章,很简单的静态网页爬取,不需考虑反扒问题。话不多说,直接案例说话。

实例:从
https://www.biquge.com.cn/book/24032/,爬取小说的全部章节的内容。

图1

实现方法:requests 访问 + BeautifulSoup解析

1、目标网址是静态网页,浏览网址和数据网址相同,可直接使用。

import requests # 导入requests库from bs4 import BeautifulSoup # 导入BeautifulSoup库url = ''https://www.biquge.com.cn/book/23341/'' # 准备好目标网址

2、requests 访问网址获得网页

打开浏览器控制台,查看Network下的Response发现有我们需要用的章节的标题和链接,用requests访问网址,就是为了获取下图中response界面下红框的内容。

图2

requests 访问网址代码:

import requestsfrom bs4 import BeautifulSoupurl = ''https://www.biquge.com.cn/book/23341/''response= requests.get(url)                           #  requests访问网址,获得的内容放入response

获得的内容放入response变量(自定义,可随意取)里。

3、BeautifulSoup解析网页获得内容

用BeautifulSoup解析response变量里的内容,方法为:

import requestsfrom bs4 import BeautifulSoupurl = ''https://www.biquge.com.cn/book/23341/''response= requests.get(url)soup = BeautifulSoup(response.content, 'lxml') # BeautifulSoup解析response里的内容,放入soup里

现在网页内容已经被赋值到变量soup了,此时若打印s,会得到上面图2红框的内容。

4、解析内容爬取小说名,并用其创建一个文件夹,以备放后面下载的小说正文

通过在response里查找,我们发现标题在图3如下位置有出现:

图3

booktitle = soup.find('h1').textif not os.path.isdir(booktitle):  # 判断当前文件夹下是否存在和小说名同名的文件夹    os.makedirs(booktitle)  # 若不存在,则创建小说同名文件夹

图4,爬取小说名

5、继续用BeautifulSoup解析soup内容,获得章节标题及网址

继续在图2response里查找,发现章节信息都在dd标签下的a标签里,如图5:

图5

提取章节标题和链接代码:

import requestsfrom bs4 import BeautifulSoup............dd = soup.find_all('dd')for i in range(len(dd)): title = dd[i].find('a').text # 获得章节名 chap_url = dd[i].find('a')['href'] # 获得章节链接print(title, ': ', chap_url) # 临时打印查看效果如下图

图6

5、循环遍历访问章节链接,获得小说正文

通过上面的操作,我们获得了每一章节页面的具体网址链接,继续用requests访问链接,就能获得小说的网页页面,接着用BeautifulSoup解析获得小说内容。我们可用简单方法,快速找到小说内容所在位置:在小说页面正文区域右键单击,选择“检查”或“审查元素”,会自动弹出浏览器控制台并高亮显示的正文在网页页面里的位置,分析确定提取参数即可。

图7

自动高亮显示位置

通过上面的操作,我们能轻松的找到小说文本在网页里的位置,并能知道两个参数,标签:'div';id:'content',然后通过这两个参数提取出小说文本。

import requestsfrom bs4 import BeautifulSoup............for i in range(len(dd)):    if i == 2:    #  临时设置只看第3篇文章的打印效果,用于调试        title = dd[i].find('a').text        chap_url = dd[i].find('a')['href']        response1 = requests.get('https://www.biquge.com.cn' + chap_url) #访问链接        soup1 = BeautifulSoup(response1.content, 'lxml')   # 获得网页        text = soup1.find('div', id='content').text   #解析网页获得小说正文        print(text)      # 试打印看效果

图8,打印第3篇正文成功

6、保存结果

f = open(path + '/' + title + '.txt', 'a+', encoding='utf-8') # 设置章节标题为文件名 f.write(text) # 写入小说正文

至此,代码完成,能放心下载了。

7、运行效果

我们在完整代码里,设置一次性下载100章节的代码,来看看下载的效果。完整代码:

import requests, osfrom bs4 import BeautifulSoupurl = 'https://www.biquge.com.cn/book/23341/'response = requests.get(url)soup = BeautifulSoup(response.content, 'lxml') booktitle = soup.find('h1').textif not os.path.isdir(booktitle):  # 判断当前文件夹下是否存在和小说名同名的文件夹    os.makedirs(booktitle)  # 若不存在,则创建小说同名文件夹dd = soup.find_all('dd')for i in range(len(dd)):    if i < 100:        title = dd[i].find('a').text        chap_url = dd[i].find('a')['href']        response1 = requests.get('https://www.biquge.com.cn' + chap_url)        soup1 = BeautifulSoup(response1.content, 'lxml')        text = soup1.find('div', id='content').text        f = open(booktitle + '/' + title + '.txt', 'a+', encoding='utf-8')        f.write(text)        print('正在下载《 {} 》...... {} / {} '.format(title, i+1, len(dd)))    else:        breakprint('本次共下载 {} 章, 保存地址:{}'.format(i, os.getcwd() + '\\' + booktitle + '\\'))

运行效果:

(0)

相关推荐

  • 程序员不讲武德,为女朋友乱用多线程!

    程序员不讲武德,为女朋友乱用多线程!

  • python 爬虫之find、find

    BeautifulSoup 文档里,find.find_all两者的定义如下: find_all(tag, attributes, recursive, text, limit, keywords) ...

  • python爬虫beautifulsoup4系列1

    前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beauti ...

  • 立刻马上帮我下载好!

    官网:www.youquhome.cn hello大家好,这里是每天爆肝更新的老Y工作室. 放假啦!首先祝大家五一节快乐,老Y建议在家好好休息,就别掺和外面的人山人海啦. 事情是这样子的,昨天女神丽丽 ...

  • 用 50 行代码写个听小说的爬虫

    来源:Python 技术「ID: pythonall」 在路上发现好多人都喜欢用耳机听小说,同事居然可以一整天的带着一只耳机听小说.小编表示非常的震惊.今天就用 Python 下载听小说 tingch ...

  • 【Python】 简单网络爬虫实现

    引言 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. --维基百科 网络爬虫可以将自己所访问的页面保存下来,以 ...

  • python爬虫beautifulsoup4系列3

    前言 本篇手把手教大家如何爬取网站上的图片,并保存到本地电脑 一.目标网站 1.随便打开一个风景图的网站:http://699pic.com/sousuo-218808-13-1.html 2.用fi ...

  • Python爬虫实战练习:爬取微信公众号文章

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:徐洲更 为了实现该爬虫我们需要用到如下工具 Chrome浏览器 Py ...

  • Python爬虫实战教学:爬取电影视频数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 做了一些小项目,用的技术和技巧会比较散比较杂,写一个小品文记录一下,帮助熟悉. 需求:经常在腾讯视 ...

  • Python爬虫日记一:爬取豆瓣电影中速度与激情8演员图片

    2017.04.27 16:34:04字数 915阅读 1,958 一.前言 这是我第一次写文章,作为一个非计算机,编程类专业的大二学生,我希望能够给像我这样的入门的朋友一些帮助,也同时激励自己努力写 ...

  • python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库。

    小帅b说过 在这几篇中会着重说说将爬取下来的数据进行存储 上次我们说了一种 csv 的存储方式 这次主要来说说怎么将爬取下来的数据保存到 MySQL 数据库 接下来就是 学习python的正确姿势 真 ...

  • python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害!

    是时候给你说说 爬虫框架了 使用框架来爬取数据 会节省我们更多时间 很快就能抓取到我们想要抓取的内容 框架集合了许多操作 比如请求,数据解析,存储等等 都可以由框架完成 有些小伙伴就要问了 你他妈的 ...

  • Python连接MySQL数据库方法介绍(超详细!手把手项目案例操作)

    作者 | CDA数据分析师 来源 | CDA数据分析研究院 本文涉及到的开发环境: 操作系统 Windows 10 数据库 MySQL 8.0 Python 3.7.2 pip 19.0.3 两种方法 ...

  • 超详细的 Python 基础语句总结(多实例、视频讲解持续更新)

    目录 一.运算符 1.1 + --两个对象相加 1.2 - --得到负数或是一个数减去另一个数 1.3 * --两个数相乘或是返回一个被重复若干次的字符串.列表.元组 1.4 / --两个数相除 1. ...

  • 「程序员必看」超详细的Python文件操作知识

    本文分七个模块为大家详细介绍python中文件操纵相关知识,闲话少说,让我们开始! 一.文件的打开和关闭 open()函数 f1 = open(r'd:\测试文件.txt', mode='r', en ...

  • 硬肝!超详细的Python文件操作知识

    重磅干货,第一时间送达 [导语]:python进行文件操作,在日常编程中是很常用的.为了方便大家,这里对各种文件操作的知识进行汇总.一文在手,无须它求!来一起学习吧.--- 以下是正文 ---本文分七 ...