常用的抓取页面的模块通常使用一个第三方模块requests. 这个模块的优势就是比urllib还要简单, 并且处理各种请求都比较方便.
既然是第三方模块, 那就需要我们对该模块进行安装, 安装可能有些慢,可以使用科学上网安装方法:
pip install requests
OK. 接下来我们来看看requests能带给我们什么?
发送GET请求
# 案例1. 抓取搜狗搜索内容
kw = input("请输入你要搜索的内容:")
response = requests.get(f"https://www.sogou.com/web?query={kw}") # 发送get请求
# print(response.text) # 直接拿结果(文本)
with open("sogou.html", mode="w", encoding="utf-8") as f:
f.write(response.text)
接下来, 我们搞百度翻译~
首先要获取Url
可以看出该请求的请求方式为post,
接下来就是对翻译结果的一个爬取过程
# 案例2.抓取百度翻译数据
# 准备参数
kw = input("请输入你要翻译的英语单词:")
dic = {
"kw": kw # 这里要和抓包工具里的参数一致.
}
# 请注意百度翻译的sug这个url. 它是通过post方式进行提交的. 所以我们也要模拟post请求
resp = requests.post("https://fanyi.baidu.com/sug", data=dic)
# 返回值是json 那就可以直接解析成json
resp_json = resp.json()
# {'errno': 0, 'data': [{'k': 'Apple', 'v': 'n. 苹果公司,原称苹果电脑公司'....
print(resp_json['data'][0]['v']) # 拿到返回字典中的内容
当get请求有多个参数时的处理
# 案例3: 抓取豆瓣电影
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action':'',
'start': '0',#从库中的第几部电影去取
'limit': '20',#一次取出的个数
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response = requests.get(url=url,params=param,headers=headers)
list_data = response.json()
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over!!!')
总结
1.requests发送Get请求时,参数用params,发送post请求时用data
2.User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。
3.User-Agent反爬原理:在某个浏览器中正常显示,但通过伪装UA可以绕过检测。