【python爬虫】requests初应用(百度翻译、豆瓣)
requests初了解
Requests库是一个Python的第三方库,可以通过调用来帮助我们实现自动爬取HTML网页页面以及模拟人类访问服务器自动提交网络请求。
安装方式:
pip install requests
一、获取百度翻译的结果(单词)
- 首先我们先进入百度翻译的网址https://fanyi.baidu.com/,然后按F12打开开发者工具,再点击如图所示按钮将加载信息清空
- 然后将输入法换成英文(这里必须换成英文),否则就无法拿到如图的下拉菜单。在开发者工具中选择XHR,我们会发现一个sug页面
- 打开这个sug我们会发现会出来这个下拉列表中的内容,可以发现,我们已经找到了数据源
- 我们选择headers,发现数据请求的网址是https://fanyi.baidu.com/sug,查看payload,发现里面只有一个参数kw
通过以上几个步骤,我们写代码的思路已经很明显了。代码示例如下:
import requests
url = "https://fanyi.baidu.com/sug"
s = input("请输入要翻译的内容:")
data = {
"kw": s
}
resp = requests.post(url,data=data)
print(resp.json())
调用requests库,访问数据源地址,在headers中发现请求方式是post,将参数单独列出,方便管理,最后返回一个json数据。
二、 爬取豆瓣信息
- 首先进入豆瓣官网https://movie.douban.com/,首页上面有许多类目,我们选择排行榜,我们可以看到排行帮页面里面有很多信息,但是简简单单采用requests并没有办法拿到数据(这一部分信息的爬取会在后面的文章讲解),但是我们可以看到右边有一个分类排行榜,我们可以拿到分类排行榜里面的信息。
- 假如我们选择喜剧类目,打开开发者工具,清空当前的加载项,重新加载页面,从返回的网页源代码中,我们没有找到关于这些电影的信息,因此我们断定,这一部分信息是通过二次请求返回的。
- 那么,我们选择XHR,当我们查看到第三个的时候,发现,里面有20条信息,但我们点开第一条,很不幸,他们的电影信息被我们找到了,那就相当于说我们已经找到了数据源。
- 我们查看headers,但是我们发现,request URL特别长,后面跟了很多东西,其实在问号后面都是所发送的参数,因此,我们设置网址的时候只要问号的前面一部分即可,同时也知道请求方式为get。
- 查看payload,了解参数构成
代码如下:
import requests
url = 'https://movie.douban.com/j/chart/top_list'
#参数--payload
params = {
"type": "24",
"interval_id": "100:90",
"action":"",
"start": 0,
"limit": 20
}
resp = requests.get(url = url,params=params)
print(resp.text)
resp.close() #关掉request,防止过多的请求
get和post的请求参数设置不同,get中的参数是params,而post中的参数是data
但是结果我们发现,并没有内容输出,只有一种可能,就是我们被反扒了
6. 所以我们再给它设置一个headers,让python来模拟浏览器来发送数据,我们可以从获取数据的网页上的headers中找到我们所需要设计的,一般只用设置一个user-agent参数,然后把resp.text换成resp.json(),这样得到的数据看起来更舒服一点。
import requests
url = 'https://movie.douban.com/j/chart/top_list'
#参数--payload
params = {
"type": "24",
"interval_id": "100:90",
"action":"",
"start": 0,
"limit": 20
}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36"}
resp = requests.get(url = url,params=params,headers = headers)
print(resp.json())
resp.close() #关掉request,防止过多的请求
最终结果如下:
然后我们就可以对得到的数据进行处理,最终拿到我们想要的一部分,比如影片名,影片的信息网址等
7. 我们这样设置参数,得到的只是当前页面的信息,但是我们想获取下一个页面的信息呢?我们可以往下拉,会发现又加载出来一个网页,点开发现,参数中的start参数变化了,我们就可以明白,我们通过调整start参数来获取所有的数据!
总结
这篇文章以两个例子来大概讲解requests库在爬虫中的应用,以及在最简单的爬虫中,我们从哪寻找数据,以及参数的设置。