爬虫之常见的反扒
cookies
一般用requests直接请求网址的时候有时候可能会遇到反扒措施,这时候可以考虑一下加上user–agent伪装成浏览器;也可能有登录限制,这时候cookies就有用处了
浏览器中的cookie是保存我们的账号数据和访问记录,在爬取的过程中加上cookie可以增加爬取数据的成功几率
获取cookies有两种方式,一种是requests 获取cookies ;一种是selenium获取cookies
自动登录原理:人工在浏览器上完成登录操作,获取登录之后的cookie信息,再通过代码发送请求的时候携带cookies信息
浏览器打开网址——浏览器控制台——network——all——headers——cookie ——将cookies的值复制
import requests
headers = {
'cookie':'.....'
}
resp=requests.get('https://www.zhihu.com/',headers=headers)
print(resp.text)
· 打开需要完成自动登录的网站(需要获取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))
· 添加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
用法如下:
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进行投诉反馈,一经查实,立即删除!