本文介绍: 在爬取网站过程中,因为频繁访问网站,会出现ip被封情况,但是又必须获取该数据,可以代理ip访问网站浏览器打开网址——浏览器控制台——network——all——headers——cookie ——将cookies的值复制自动登录原理:人工在浏览器上完成登录操作获取登录之后的cookie信息,再通过代码发送请求的时候携带cookies信息浏览器中的cookie保存我们账号数据访问记录,在爬取过程中加上cookie可以增加爬取数据的成功几率。获取代理ip流程——省略。

爬虫之常见的反扒

cookies

一般用requests直接请求网址的时候有时候可能会遇到反扒措施,这时候可以考虑一下加上useragent伪装成浏览器;也可能有登录限制,这时候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我们需要访问的网址

原文地址:https://blog.csdn.net/Itmastergo/article/details/134662763

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_7465.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注