一、网页分析
目标网址:https://tieba.baidu.com/f?ie=utf-8&kw=%E6%9D%8E%E6%AF%85&fr=search
我在搜索框中输入了,李毅吧,也可以搜索别的,可以发现url中?开始后面参数有个kw变化
那么可以得到结论,爬取此网页需要拼接url,或者传入参数
对于爬取一个网页,永远都是第一步,目标数据能否在doc中找到(针对反爬措施分析),如下图,成功找到,说明
无需考虑 异步,等等,加密。
分页爬取分析:
那么根据以上网页分析
确认了2件事情
第一:简单网页,无需考虑加密
第二:点击分页中的跳转页数,知道每一页+50 ,pn
第三:需要拼接参数,请求头伪装(搜索关键词,分页的pn)
第三需求能够有两种方式:
方法一:拼接路由url,
方法二:params传参
这里使用哪个都可以,我使用的方法一
二、代码实现与步骤
import requests,os
#批量的爬取:分页,get请求的参数中的一个参数来控制的。
#pn =0 1
#pn=50 2
#pn=100 3
def get_page(kw,page):
'''
获取一页贴把数据
:param kw: 贴吧的名称
:param page: 页码 1,2...
:return:
'''
# 确定url
base_url = 'https://tieba.baidu.com/f?'
params = {
'kw': kw,
'ie': 'utf-8',
'pn': (page-1)*50,
}
response = requests.get(base_url ,params=params)
dirname = f'./tieba/{kw}'
# 判断是否有存放文件夹,如果没有就创建
if not os.path.exists(dirname):
os.mkdir(dirname)
with open(f'{dirname}/{page}.html', 'w', encoding='utf-8') as fp:
fp.write(response.text)
print(f'{dirname}/{page}.html下载完成!')
if __name__ == '__main__':
kw = input('请输入关键字:')
for i in range(1,11):
get_page(kw,i)
三、结果分析
爬取的结果会保存在我拼接的路径中
可以打开李毅吧第一页,浏览器呈现的关键词
在本地1.html 中搜索,如果搜到了,就确认爬取陈宫了