欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一看就会的20行代码爬取豆瓣读书Top250

程序员文章站 2022-04-07 21:52:11
...

想入门Python爬虫,大家都喜欢拿爬取豆瓣读书Top250为例子来练手。
下面我就给大家分享一个简单的爬虫。

1.确定所需库

首先我们要确定需要引入的库。
要爬取网页的数据,当然要发送请求啦,所以我们要引入请求库即Requests
由于目前网站大多有反爬虫机制,我们要将爬虫伪造成正常的浏览器访问,这就需要制作请求头。为了方便我们引入请求头库即fake_useragent
在爬取到网页数据后,我们还要对数据进行一下处理,从而得到我们想要的数据,这就交给数据清洗库即lxml来解决吧。

# 请求库
import requests
# 请求头库
from fake_useragent import UserAgent
# 数据清洗库
from lxml import etree

2.制作请求头

由于这个比较初级(主要是我还没学到高级的程度 ????),制作的请求头非常简单,只通过UserAgent().random方法随机改变User_Agent。

# 制作请求头
res = UserAgent().random
headers = {
    'User-Agent': res
}

3.分析页面结构

重点来咯!
我们打开豆瓣读书Top250的网页→豆瓣读书 Top 250
然后再按F12打开Chrome浏览器自带的抓包工具,来分析我们想要的数据都在哪一个标签内。
一看就会的20行代码爬取豆瓣读书Top250
这里我们可以点击这个红框框里的按钮或用快捷键Ctrl+Shift+C来开启定位模式。
我们想要爬取到书的名字,就要找到它在什么位置。
一看就会的20行代码爬取豆瓣读书Top250
这样我们看到书名在一个<a>标签内,且其属性title即为书名,则我们的目标就为取到这个title!
我们看到所有的书名都是被一个class="pl2"的<div>标签包含着,那么我们就可以通过xpath语句准确的提取出书名,即 div[@class=“pl2”]/a/@title

4.开始编码!

知道了这些我们就来写具体的代码吧。

	# 待请求的网址
    base_url = 'https://book.douban.com/top250?start=0'
    # 接受响应
    response = requests.get(base_url, headers=headers)
    # 获取源码
    html = response.text
    # 源码的预处理
    htmls = etree.HTML(html)
    book_name = htmls.xpath('//div[@class="pl2"]/a/@title')
    for i in book_name:
        print(i)

可是现在又出现了一个问题嗷,我们只是爬取了第一页的数据,这并没有250个呀,怎么才能爬取下一页的数据呢?
我们看到第一页的链接为
一看就会的20行代码爬取豆瓣读书Top250
而第二页的链接为
一看就会的20行代码爬取豆瓣读书Top250
原来是后面的参数以25为步长在变化,那么我们就在上面的基础上套一个循环,即

for num in range(0, 226, 25):
    # 待请求的网址
    base_url = 'https://book.douban.com/top250?start={}'.format(num)
    # 接受响应
    response = requests.get(base_url, headers=headers)
    # 获取源码
    html = response.text
    # 源码的预处理
    htmls = etree.HTML(html)
    book_name = htmls.xpath('//div[@class="pl2"]/a/@title')
    for i in book_name:
        print(i)

这样,你就可以在控制台看到输出的结果啦!
一看就会的20行代码爬取豆瓣读书Top250

完整代码

我们稍微调整一下,改为文件输出,完整代码如下

# 请求库
import requests
# 请求头库
from fake_useragent import UserAgent
# 数据清洗库
from lxml import etree
# 制作请求头
res = UserAgent().random
headers = {
    'User-Agent': res
}
# 讲排名写入文件
fp = open('./DoubanTop250.txt', 'a', encoding='utf-8')
# 排名序号
no = 1
for num in range(0, 226, 25):
    # 待请求的网址
    base_url = 'https://book.douban.com/top250?start={}'.format(num)
    # 接受响应
    response = requests.get(base_url, headers=headers)
    # 获取源码
    html = response.text
    # 源码的预处理
    htmls = etree.HTML(html)
    book_name = htmls.xpath('//div[@class="pl2"]/a/@title')
    for i in book_name:
        fp.write("No."+str(no)+":"+i+'\n')
        no += 1

效果:
一看就会的20行代码爬取豆瓣读书Top250
大功告成啦,是不是很简单呢,做完也有一些成就感呢,快来动手试一试吧!
学习就是要一步一步慢慢来嘞,成就感会驱使你继续学习下去,那么大家一起努力嗷!


这里是 咸鱼不垫底
不定时更新自己的学习经历,以及分享自己学到的知识!