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