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

网页爬虫反扒措施有哪些?

爬虫之常见的反扒

cookies

一般用requests直接请求网址的时候有时候可能会遇到反扒措施,这时候可以考虑一下加上user-agent伪装成浏览器;也可能有登录限制,这时候cookies就有用处了

浏览器中的cookie是保存我们的账号数据和访问记录,在爬取的过程中加上cookie可以增加爬取数据的成功几率

获取cookies有两种方式,一种是requests 获取cookies ;一种是selenium获取cookies

1、requests获取cookies

自动登录原理:人工在浏览器上完成登录操作,获取登录之后的cookie信息,再通过代码发送请求的时候携带cookies信息

requests 获取cookies步骤:

浏览器打开网址——浏览器控制台——network——all——headers——cookie ——将cookies的值复制

import requests
headers = {'cookie':'.....'
}
resp=requests.get('https://www.zhihu.com/',headers=headers)
print(resp.text)

2、selenium获取cookies

获取自动登录网站的cookies

· 打开需要完成自动登录的网站(需要获取cookie的网站)

· 给足够长的时候让人工完成自动登录并且人工刷新出登录之后的页面

强调:一定要吧第一个页面刷新出登之后的转态

· 获取登录之后的cookie并且将获取到的cookie保存到本地文件

from selenium.webdriver import Chrome
from json import dumps
b = Chrome()
# 1. 打开需要完成自动登录的网站(需要获取cookie的网站)
b.get('https://www.taobao.com/')
# 2. 给足够长的时间让人工完成自动登录并且人工刷新出登录后的页面
# 强调:一定要把第一个页面刷新出登录之后的状态
input('已经完成登录:')
# 3. 获取登录后的cookie并且将获取到的cookie保存到本地文件
cookies = b.get_cookies()
print(cookies)
with open('file3/taobao.txt', 'w', encoding='utf-8') as f:f.write(dumps(cookies))

3、selenium使用cookies

· 打开需要自动登录的网站

· 添加cookies

· 重新打开需要登录的网页

from selenium.webdriver import Chrome
from json import loads
b = Chrome()
# 1. 打开需要自动登录网页
b.get('https://www.taobao.com/')
# 2. 添加cookie
with open('file3/taobao.txt', encoding='utf-8') as f:content = f.read()cookies = loads(content)
for x in cookies:b.add_cookie(x)
# 3. 重新打开需要登录的网页
b.get('https://www.taobao.com/')

代理ip

在爬取网站的过程中,因为频繁访问该网站,会出现ip被封情况,但是又必须获取该数据,可以用代理ip来访问该网站;分为两种情况,requests和selenium

1、requests 使用代理ip

获取代理ip的流程------省略

用法如下:

import requests
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
# 两种proxies方式选择其一
# proxies = {
#     'http':'.....',
#     'https':'.....'
# }
proxies = {'http':'http://119.7.147.173:4531','https':'http://119.7.147.173:4531'
}
response=requests.get('https://movie.douban.com/top250',headers=headers,proxies=proxies)
print(response.text)

实际用法:

import requests
from time import sleep
def get_ip():url='获取代理ip的地址'while True:response=requests.get(url)if response.text[0]=='{':print('提取失败')continuesleep(1)return response.text
def get_douban():headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}ip=get_ip()proxies = {'http': ip,'https':ip}response=requests.get('https://movie.douban.com/top250',headers=headers, proxies=proxies)print(response)
if __name__ == '__main__':get_douban()

2、selenium使用代理ip

from selenium.webdriver import Chrome,ChromeOptions
# 1、添加配置对象
options = ChromeOptions()
# 2、添加配置
options.add_argument('--proxy-server=http://代理ip')
# 3、通过指定配置创建浏览器对象
b=Chrome(options=options)
b.get(url)  #  url是我们需要访问的网址
http://www.lryc.cn/news/247939.html

相关文章:

  • C#实现批量生成二维码
  • 3种在ArcGIS Pro中制作山体阴影的方法
  • 【ChatGLM2-6B】Docker下部署及微调
  • 输入两个整数,输出它们的乘积。 ← Python 及 C++ 代码比较
  • C语言——从键盘输人一个表示年份的整数,判断该年份是否为闰年,并显示判断结果。
  • 出于隐私和安全的考虑,有时需要从谷歌删除你的个人数据,有两种方法
  • 【同一局域网下】两台电脑之间互ping
  • 【精选】Ajax技术知识点合集
  • 智能优化算法应用:基于水循环算法无线传感器网络(WSN)覆盖优化 - 附代码
  • java-netty知识点笔记和注意事项
  • 英伟达不同系列GPU介绍
  • C语言——I /深入理解指针(二)
  • MySQL使用函数和存储过程实现:向数据表快速插入大量测试数据
  • 力扣labuladong——一刷day59
  • 接口性能测试 —— Jmeter并发与持续性压测
  • redis报错3
  • Proteus的网络标号与总线
  • 4、stable diffusion
  • LeetCode51. N-Queens
  • 前端vue3——html2canvas给网站截图生成宣传海报
  • C语言实现串的部分算法
  • UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)
  • pandas教程:USDA Food Database USDA食品数据库
  • 0基础学习VR全景平台篇第122篇:VR视频剪辑和输出 - PR软件教程
  • ucharts中,当数据为0时,不显示
  • React函数组件渲染两次
  • 人工智能 - 图像分类:发展历史、技术全解与实战
  • go标准库
  • 【Web安全】拿到phpMyAdmin如何获取权限
  • Python与GPU编程快速入门(一)