网络请求模块:urllib模块(比较复杂)、requests模块
一、requests模块:
python中原生的一款基于网络请求的模块,功能强大、简单便捷、效率极高。
1、作用:模拟浏览器发请求
2、如何使用(编码流程):
- 指定url
- 发起请求
- 获取响应数据
- 持久化存储
3、环境安装:pip install requests
4、实战编码:
- 需求:爬取搜狗首页页面的数据
- 代码:
import requests
if __name__=="__main__":
#step1:指定url
url='https://www.sogou.com/'
#step2:发起请求
#get方法会返回一个响应对象
response=requests.get(url=url)
#step3:获取响应数据,text返回的是字符串形式的响应数据
page_text=response.text
print(page_text)
#step 4:持久化存储
with open("./sogou.html","w",encoding="utf-8") as fp:
fp.write(page_text)
print("爬取数据结束")
- 结果:
返回的响应数据(部分截图):
HTML文件打开后界面截图:
5、实战巩固1:爬取搜狗指定词条的搜索结果界面(简易网页采集器)
- 代码:
import requests
if __name__=="__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/'
}
url='https://www.sogou.com/web'
#处理url携带的参数:封装到字典中
kw=input('enter a word:')
param={
'query':kw
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response=requests.get(url=url,params=param,headers=headers)
page_text=response.text
fileName=kw+'.html'
with open(fileName,"w",encoding="utf-8") as fp:
fp.write(page_text)
print(fileName,"保存成功!!")
- 关于url
浏览器中检索“北斗导航”的链接是这样的:https://www.sogou.com/web?query=北斗导航&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=23426&sst0=1596357337277&lkt=4%2C1596357313851%2C1596357313956&sugsuv=000E298C716410845E48FF7140CCA041&sugtime=1596357337277
简化一下,是这样的:https://www.sogou.com/web?query=北斗导航
?前面的是浏览器,后面的是我们检索的内容参数。
- 关于params
这里作为简易网页采集器,检索的内容设置为动态,由用户输入把query存入字典中,query作为key值,value由input输入
- 关于headers
存放的是User-Agent
获取方法,前一篇笔记中有提到。
学习python爬虫,需要知道什么?
- UA检测
门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,说明该请求是一个正常的请求。但是,如果检测到请求的载体身份标识不是基于某一款浏览器的,则表示该请求是不正常的请求(爬虫)。则服务器端很有可能拒绝此次请求。