目录
参考:python爬虫基础(5:UA伪装)_Jeeson_Z的博客-CSDN博客
一、名词
User-Agent:是请求载体的身份标识
UA检测:门户网站会检测对应请求载体的身份标识,若检测到载体身份标识为某款浏览器,说明该请求是个正常请求。若不是,则表示该请求为不正常的请求(即爬虫,请求载体要么是基于浏览器要么是基于爬虫),服务器可能会拒绝该次请求
UA伪装:让爬虫对应的请求载体身份标识伪装城某一款浏览器。具体操作:将合适的User-Agent封装到一个字典中
二、查看user-agent:
打开网页按F12,Ctrl+R,点击网络,请求标头中有个User-Agent,表示请求载体的身份标识
三、实例:模拟一个简单的网页采集器
爬虫基本流程
1.指定URL
打开一个网页,利用上面的链接作为 URL,这里只需要用到 query 一个参数即可,这个参数就是我们搜索的关键词,后面的参数可以先删去
# 指定url
url='https://www.sogou.com/web?query=%E7%BB%9F%E8%AE%A1%E5%AD%A6' # 乱码也可以用中文
由于我们此时是打开的一个固定页面,不能把 query 写死了,所以需要处理 URL 携带的参数,将其封装到字典中,这样可以用 input() 动态获取想要的结果
kw=input('enter the keyword:')
param={'query':kw}
url='https://www.sogou.com/web'
2.发起请求
上面封装字典的操作是因为,接下来发送请求对 URL 后面拼接这个 param 参数
response=requests.get(url=url,params=param)
https://www.cnblogs.com/cindy-zl24/p/9403303.html 讲述了一些 requests 常用的方法
3.获取响应数据
requests.get() 会返回一个相响应结果
page_text=response.text
4.持久化存储
使用 with open() 自动新建本地文件,该函数是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,相对open()省去了写close()的麻烦,关于该函数具体用法见Python——with open()的用法_python withopen_爬虫选手_不懂就问的博客-CSDN博客
file_name=kw+'.html'
with open(file_name,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(file_name,'保存成功')
在这里我使用该函数创建了名为 kw.html 的 html 文件(Python 本身是支持这种类型的文件的),再把我们上面返回响应结果的文本写入这个文件,可得到内容如下的一个 html 文件
点击该处用谷歌浏览器打开,结果无法访问,大概就是下面这样的页面:
UA伪装
正因为服务器可能会拒绝请求,所以在第2步发起请求时,将请求头信息伪装为 header,再进行 get() 请求
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36'}
response=requests.get(url=url,params=param,headers=header)
将这里我们浏览器的标识赋值给 header,这样我们在用 get() 访问时添加参数 headers,请求头信息就为我们指定的浏览器了
(访问成功)
四、代码
import requests
# 指定url
url='https://www.sogou.com/web?query=%E7%BB%9F%E8%AE%A1%E5%AD%A6' # 乱码也可以用中文
# 处理url携带的参数:封装到字典中
kw=input('enter the keyword:')
param={'query':kw}
url='https://www.sogou.com/web'
# UA伪装
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36'}
response=requests.get(url=url,params=param,headers=header)# 请求头信息为header
page_text=response.text # 获取响应数据,得到网页HTML源码
# 存储数据
file_name=kw+'.html'
with open(file_name,'w',encoding='utf-8') as fp: # 会默认存储在当前路径下
fp.write(page_text) # 写入
print(file_name,'保存成功')