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

liftword1周前 (02-21)技术文章9

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

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


实现方法: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界面下红框的内容。

requests 访问网址代码:

import requests
from bs4 import BeautifulSoup

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

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

3、BeautifulSoup解析网页获得内容

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

import requests
from bs4 import BeautifulSoup

url = ''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如下位置有出现:

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

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

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

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

import requests
from 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)    # 临时打印查看效果如下图


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

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


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

import requests
from 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)      # 试打印看效果

6、保存结果

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

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

7、运行效果

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

import requests, os
from bs4 import BeautifulSoup

url = 'https://www.biquge.com.cn/book/23341/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml') 
booktitle = soup.find('h1').text
if 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:
        break
print('本次共下载 {} 章, 保存地址:{}'.format(i, os.getcwd() + '\\' + booktitle + '\\'))

运行效果:

相关文章

Python实现一个基础爬虫?_用python做一个爬虫

Python爬虫技术就是指通过Python语言来编写一些自动化的数据处理程序从网页上来获取自己想要的数据,我们可以通过Python爬虫来获取公开网页上的数据,对数据进行分析、存储、数据可视化展示等操作...

什么是Python爬虫?一篇文章带你全面了解爬虫

一、什么叫爬虫爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的然后存储到云端,为网友...

程序员python入门课,30分钟学会,30行代码写爬虫项目

现在很多人学习编程,最开始就是选择的python,因为python现在比较火,薪资水平在程序员领域也是比较高的,入门快,今天就给大家分享一个用python写的小爬虫项目,只需要30行代码,认真学习,...

详细介绍一下Python中如何使用来创建爬虫?

Selenium是一个用来对Web应用程序进行测试的自动化测试工具,能够模拟出用户在浏览器中的各种行为,通过自动化的操作来执行任务,例如说可以模拟用户点击按钮、填写表单、抓取网页内容等,虽然是一个自动...

巨细!Python爬虫详解_python爬虫详细教程

来源:【公众号】Python技术爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。如果我们把互联网比作一张大...

Python爬虫常用的8个技巧,让你爬取数据得心应手

今天跟大家分享几个我在爬虫中用到的技巧,让你轻松爬取所需数据。技巧一:随机暂停,迷惑反爬机制高频率访问容易被网站识别为爬虫,所以我们要学会“劳逸结合”!使用 time.sleep() 函数,加上随机时...