爬虫练习题(四)

题目:爬取百度贴吧tieba.baidu.com

要求1.在输入框中输入海贼王

2.爬取前六页的网页源代码

3.掌握百度贴吧网页链接的运行规律,构建合适的URL

步骤:打开网址-分析网站-发送请求-提取数据-保存数据

本题目代码:

import requests
word = input("输入要搜索的内容")
start = int(input("输入起始页"))
end = int(input("输入结束页"))
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}
for n in range(start,end+1):
    url = f'https://tieba.baidu.com/f?kw={word}&pn={(n-1)*50}'
    print(url)
    response = requests.get(url, headers=headers)
    with open(f"{word}的第{n}页.html", 'w', encoding='utf-8') as file:
        file.write(response.content.decode('utf-8'))

接下来我们就打开百度贴吧看看他的URL与之前的有什么区别吧!**

1.打开网址

tieba.baidu.com

2.分析网页

初始链接

tieba.baidu.com/f?ie=utf-8&…

第一页至第四页的链接

tieba.baidu.com/f?kw=%E6%B5…

tieba.baidu.com/f?kw=%E6%B5…

tieba.baidu.com/f?kw=%E6%B5…

tieba.baidu.com/f?kw=%E6%B5…

我们可以发现除了原始百度贴吧的网页链接后面还有 kw,ie,pn,这都在符号/f?后面,这些参数我们在上一篇都已明晰,唯一不同的是搜索内容变成了 %E6%B5%B7%E8%B4%BC%E7%8E%8B 原因很简单,kw 是用户在输入框中输入的搜索内容,“海贼王”是汉字所以就被转码了,这一串字符的意思就是“海贼王”的意思。 值得注意的是

在“&”符号后面出现了pn=0的字样

每一个网址都有自己独特的一面,百度贴吧也是一样,自己携带的pn参数在一些链接中是没有的,所以在构建URL时要注意他的变化,由分析可得第一页pn=0,爹人也陪你,第三页100,每页以50递增,我们不妨修改URL测试一下第五页和第六页的链接,把pn后面的值改成200和250

这样剩余俩页的就可以凭空写出:

tieba.baidu.com/f?kw=%E6%B5…

tieba.baidu.com/f?kw=%E6%B5…

3.发送请求

导入requests模块,并且导入起始页和结束页 (这里别忘了强转哦) 还有一点就是导入搜索内容用word接收,构建好UA(User-Agent)。

import requests
word = input("输入要搜索的内容")
start = int(input("输入起始页"))
end = int(input("输入结束页"))
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}
复制代码

4、提取数据(pn的变化)

for n in range(start,end+1):
    url = f'https://tieba.baidu.com/f?kw={word}&pn={(n-1)*50}'
    print(url)
    response = requests.get(url, headers=headers)
复制代码

首先,我们需要提取第一页到第六页的数据,因为第一页pn的值为零,要满足每增长一页nn的值增加50,这个规律,我们就可以用公式pn =(n- 1)*50,当n为1时,Pn的值正好等于零,满足需求,后面的页面正好是以倍数增加,所以这个公式满足要求。以后我们要注意各种网址,每一种网址规律都不一样,想要找到它们之间的规律还是很难的,后面的文章我会详细的和大家慢慢的分析各种网址的应对情况,每一种网址需要找到规律,并且用公式把规律概括出来,并且反复的验证公式的准确性,所以公式不是唯一的,他极为灵活,要应对不同的场合,构建不同的公式,构建好可以打印一下发送请求的url。

还有一点需要注意的是,要明确是什么请求类型,这个就是Get请求,所以response=requests.get,后面传入相关成分 这个发送请求的过程就包含了get请求,突显了这是一个get请求类型的网页,后面我们会遇到post请求类型,这个咱们遇到再说,百度翻译就是一个post的请求。

5、保存数据

   with open(f"{word}的第{n}页.html", 'w', encoding='utf-8') as file:
        file.write(response.content.decode('utf-8'))
复制代码

这里就是依次把文件名,写入,转码处理好就可以,转码类型一定要看清否则会报错。

希望大家能在我的文章中打好基础能够满怀信心的应对初级爬虫的任何挑战!后续会继续推出爬虫知识点与相关题目!

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务