19爬虫之常见反反扒措施

爬虫之常见的反反扒

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('提取失败')
            continue
            sleep(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是我们需要访问的网址
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兮知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值