一、使用工具:
python3.10
pycharm professional
二、使用模块:
requests
re
time
os
三、 代码如下:
# 基于requests模块的get请求
# 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)
"""
反爬机制:
门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,那么就意味着该请求是一个正常的请求(即,真实用户通过浏览器发出的请求);如果检测到请求的载体身份标识不是基于某一款浏览器的,则意味着该请求是不正常的请求(爬虫程序),那么服务器端就很有可能拒绝该次请求。
·User-Agent:请求载体的身份标识,使用浏览器发起的请求,请求载体的身份标识为浏览器,使用爬虫程序发起的请求,请求载体为爬虫程序。
·UA检测:相关的门户网站通过检测请求该网站的载体身份来辨别该请求是否为爬虫程序,如果是,则网站数据请求失败。因为正常用户对网站发起的请求的载体一定是基于某一款浏览器,如果网站检测到某一请求载体身份标识不是基于浏览器的,则让其请求失败。因此,UA检测是我们整个课程中遇到的第二种反爬机制,第一种是robots协议。
应对UA检测的策略就是——UA伪装
·UA伪装:通过修改/伪装爬虫请求的User-Agent来破解UA检测这种反爬机制(即让爬虫对应的UA伪装成某一款浏览器)
"""
# 导包
import requests
if __name__ == '__main__':
# 指定URL
url = "https://www.sogou.com/web?"
# UA伪装:将对应的User-Agent封装到一个字典中
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70"
}
# 指定搜索关键字
word = input('enter a word you want to search:')
# 封装get请求参数:如果请求携带了参数,则可以将参数封装到字典中结合这requests请求方法中的data/params参数进行url参数的处理
# 处理url携带的参数:将参数封装到字典中
param = {
"query":word
}
# 发起请求:使用get方法发起get请求,该方法会返回一个响应对象。参数url表示请求对应的url
# 对指定的url发出的请求对应的url是携带参数的,并且请求过程中处理了参数(带上了参数)
# headers=headers 表示对请求头信息进行UA伪装
response = requests.get(url=url, params=param,headers=headers)
# 获取响应数据:通过调用响应对象的text属性,返回响应对象中存储的 字符串形式 的响应数据(页面源码数据)
page_text = response.text
# 对字符串进行持久化存储
file_name = word+".html"
with open(file_name,"w",encoding="utf-8") as f:
f.write(page_text)
print(file_name,'保存成功')