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

想入门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_第1张图片
这里我们可以点击这个红框框里的按钮或用快捷键Ctrl+Shift+C来开启定位模式。
我们想要爬取到书的名字,就要找到它在什么位置。
一看就会的20行代码爬取豆瓣读书Top250_第2张图片
这样我们看到书名在一个标签内,且其属性title即为书名,则我们的目标就为取到这个title!
我们看到所有的书名都是被一个class="pl2"的

标签包含着,那么我们就可以通过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个呀,怎么才能爬取下一页的数据呢?
我们看到第一页的链接为
在这里插入图片描述
而第二页的链接为
在这里插入图片描述
原来是后面的参数以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_第3张图片

完整代码

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

# 请求库
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_第4张图片
大功告成啦,是不是很简单呢,做完也有一些成就感呢,快来动手试一试吧!
学习就是要一步一步慢慢来嘞,成就感会驱使你继续学习下去,那么大家一起努力嗷!


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

你可能感兴趣的:(python,html,xpath)