当前位置: 首页 > news >正文

爬虫学习笔记(四)---request入门

例1

例1:写一个爬取百度搜索页面的程序,以搜索一个喜欢的明星为例(如在搜索框中输入周杰伦)

正常搜索

页面

爬虫思路:

1.用一个query变量,在控制台输入的方式更加灵活的输入想爬取的明星的百度搜索页面

因为是get请求,所以把wd=周杰伦的‘周杰伦’替换成{},{}的作用是把一个变量放到一个字符串里面,再在url后面追加字符串的format方法.format(query)实现,其中wd的作用是作为查询参数

2.添加一个user-agent代理在请求头里面,伪装成一个更像正常浏览器搜索的动作,因为百度有反爬机制,如果未检测到一个请求的user-agent(请求的设备【浏览器&操作系统&设备型号】),就会阻止访问

3.将爬取到的信息保存到一个文件中zhou.html

代码实现:

import requests
query = input("你喜欢的一个明星")
url='https://www.baidu.com/baidu?ie=utf-8&wd={}'.format(query)#大括号将某个变量放到一个字符串里面
myHeaders ={#伪装一个UserAgent,伪装的更像浏览器
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0"
}
resp = requests.get(url,headers=myHeaders)#处理一个小小的反爬
with open("Zhou.html", mode="w",encoding="utf-8") as f:#写入模式f.write(resp.text)

结果 :

控制台输入周杰伦

创建了一个爬取的信息的文件zhou.html,用浏览器打开这个html前端页面

由下面的localhost地址知道这个页面是爬取到的,和正常访问的页面一样,爬取成功

例2

例2:百度翻译爬虫爬取

正常访问的页面:

1、右键->检查:进入抓包工具页面

2、输入dog,点击sug(链接),点击preview,查看响应的json数据

3.查看请求方式

观察到此次请求的方式为POST,利用POST请求发送的参数为Form Data,传参方式与GET有差别,GET的传输参数是直接拼接到了URL里面

下面的url为https://fanyi.baidu.com/sug

代码实现:

import requests
url = "https://fanyi.baidu.com/sug"
s = input("请输入你要翻译的英文单词")
myData = {"kw": s
}myHeaders = {#伪装浏览器,反反爬策略
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0"
}
#发送post请求(发送的数据必须放在字典中,通过data的参数进行传递
resp = requests.post(url, data=myData, headers=myHeaders)
#将服务器返回的内容直接处理成json格式的数据(在python中就是词典)
print(resp.json())

结果:

 例3

请求路径和请求方式

如下图,请求路径URL如下,问号?前面的是请求的统一路径,问号?后面的是GET请求具体的参数(直接拼接到原URL上面)

请求的参数如下图

知道了请求的路径、请求的方式(GET请求)以及请求的参数就可以编写爬虫程序代码

代码实现:

GET请求的url拼接(因为原url问号后面的GET请求参数过长,所以统一封装成json格式的参数)

import requests
#1--url
url = "https://movie.douban.com/j/chart/top_list"#2--统一封装GET请求的参数
myParam = {
"type": "25",
"interval_id": "100:90",
"action": "",
"start": "100",
"limit": "20"
}#拼接url和parameter
resp = requests.get(url=url, params=myParam)
#验证这个url是否和原始url一样
print(resp.request.url)

控制台输出 ,如下图所示,url完全相同,代表拼接正确

被反爬

如果运行成功,但是控制台没有出现任何的爬取内容,说明被反爬了,阻止了访问

排查原因进行反反爬(首先进行user-agent位置)

因为基本上被反爬的首要原因就是因为服务器对于user-agent进行了检查

user-agent

包括访问者使用的浏览器类型、浏览器语言、浏览器插件、OS版本、CPU类型、浏览器渲染引擎

反反爬步骤

1.复制自己的User-Agent,在抓包工具的network中的header请求头中可以查到,将自己的代理复制

新增一个请求头的内容如下:

myHeaders = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0"
}

添加到原来的请求中

resp = requests.get(url=url, params=myParam,headers=myHeaders)

再次运行,出现爬取内容,说明被反爬的原因就是因为该网站设置了对User-agent进行检查,此次反反爬成功

上面的内容太乱,所以输出改为json格式的,因为本来这些数据都是用json封装的

print(resp.json())

输出结果

完整代码:

import requests
#1--url
url = "https://movie.douban.com/j/chart/top_list"#2--统一封装GET请求的参数
myParam = {
"type": "25",
"interval_id": "100:90",
"action": "",
"start": "100",
"limit": "20"
}
myHeaders = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0"
}#拼接url和parameter
resp = requests.get(url=url, params=myParam,headers=myHeaders)
#验证这个url是否和原始url一样
print(resp.request.url)
#如果控制台没有任何内容但也没有报错说明被反爬了,要使用反反爬策略(挨个尝试是什么原因导致自己被反爬了(很大可能就是因为没有user-agent)
print(resp.json())
resp.close()#关闭掉请求(否则会一直保持这个url链接),请求会被堵死(出现请求次数过多的现象)

注意在爬取完数据一定要关上请求,否则就会一直保持这个链接,多次访问这同一个URL后可能会造成堵死

相关文章:

  • npm如何安装pnpm
  • OpenObserve API Usage Guide for Log Management
  • BT134-ASEMI机器人功率器件专用BT134
  • < 自用文 rclone > 在 Ubuntu 24 访问 Google Drive 网络内容
  • JSX初学习
  • 缺口拼图3.3,某里v2,研究分析
  • 海外社交App的Web3革命:去中心化社交与Token经济实战指南
  • 《Origin画百图》之带颜色映射的3维散点图
  • 使用VS2022开发并部署QT应用
  • GC的查看
  • OCR技术,金融行业的“数字魔法”✨
  • Python列表全面解析:从基础到高阶操作
  • 前端性能优化2:结合HTTPS与最佳实践,全面优化你的网站性能
  • 普通IT的股票交易成长史--20250429午
  • 误在非开发分支上开发解决方案
  • 大语言模型能否替代心理治疗师的深度拓展研究:fou
  • 通信协议——SPI通信协议
  • 【C++编程入门】:基本语法
  • Discord多账号注册登录:如何同时管理多个账户?
  • 模型上下文协议MCP协议(Model Context Protocol)未来应用场景分析(多智能体协作A2A协议)
  • 荆州市委书记汪元程:全市各级干部要做到慎微、慎初、慎独、慎友
  • 朝鲜新型驱逐舰“崔贤”号进行多项武器试验
  • 中国人寿一季度净利润288亿增39.5%,营收降8.9%
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 五万吨级半潜船在沪完成装备装载
  • 仲裁法修订草案二审稿拟增加规定规制虚假仲裁