文章目录
反爬
1)登录反爬
2)代理ip
3)浏览器伪装
1.爬虫流程
第一步:确定目标 (到底需要爬什么数据)
第二步:找网页(看哪些网站可以提供我们需要的数据)
第三步:爬网页数据(爬虫)
1.获取网页数据
方法1(优先):看这个网页有没有我需要的数据对应的接口(如果有数据接口,直接用requests对数据接口发送请求)
方法2(其次):直接用requests对网页地址发送请求,获取网页源代码。(如果user-agent和cookie都添加了还是无法获取数据,进入下一步)
方法3(最后):使用selenium创建浏览器打开网页获取网页源代码
最后:放弃,更换网站
2.解析数据
方法1: json(json数据接口)
方法2:正则、bs4(网页源代码
3.保存数据
csv文件、数据库
代理ip
极光http代理
设置白名单,共享外网ip
1.request使用代理ip
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
# 创建代理ip对应的字典
proxy = {
'http': '221.229.53.156:4725',
'https': '221.229.53.156:4725'
}
response = requests.get('https://movie.douban.com/top250', headers=headers, proxies=proxy)
print(response.text)
2. selenium使用代理ip
from selenium.webdriver import Chrome, ChromeOptions
options = ChromeOptions()
# 添加代理ip对应的参数
options.add_argument('--proxy-server=http://221.229.53.156:4725')
b = Chrome()
b.get('https://movie.douban.com/top250')
print(b.page_source)
input()
浏览器自动登录
1. requests自动登录
import requests
# 1.requests自动登录方式: 发送请求的时候,在请求头中添加浏览器中这个网站登陆成功后的cookie信息
# 1)如何获取cookie
headers = {
'cookie': '_zap=12126d32-6a78-4f46-853d-cadc69c861bd; d_c0=AFDS8UhkgxePTgkS66iRzMDFnUEWZE__dJk=|1696734541; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1697280715; captcha_session_v2=2|1:0|10:1697426264|18:captcha_session_v2|88:ZmdzMjd0YUJwWERZdkp2VEgzVnFCUEkvZUxnZUl3M3c3ZE9aRk94N0w4ZEs3WlNHMDlkdS90ZzVEWXB0RVk1ZA==|515ef513fa0f43eedbcaf3d81c9d478bdbc88f5e7d3cdaebc1a00d2fd2b4fafb; q_c1=a0a8111b84e6474cadcc2404bdf2cfde|1697426313000|1697426313000; z_c0=2|1:0|10:1697456182|4:z_c0|92:Mi4xS1pXUElBQUFBQUFBVU5MeFNHU0RGeGNBQUFCZ0FsVk5pUGtaWmdBNUxnWGp5OHcxckplYmJqSlJoSTZPVkVCMGRR|90ccf49e648bcd020c0464ff74fbcc32e906836e86b59fd38ec1692838dd5620; _xsrf=5e3c4d6a-4a4e-4596-912a-5f8bff647d36; tst=r; SESSIONID=IQq2fkEqeitlrHeH7qvh1n6dtIiftWjSYdAjIr4cH7R; JOID=V1AVCkmrPK-RU6kUIabW-JgawZ0z72XXqDLPWVnJWNP0KuZ8YQkRn_hZrBUjU8ww1dgamgifpxqdf94emxomwUY=; osd=UFgXBU2sNK2eV64cI6nS_5AYzpk052fYrDXHW1bNX9v2JeJ7aQsem_9RrhonVMQy2twdkgqQox2VfdEanBIkzkI=; KLBRSID=fe0fceb358d671fa6cc33898c8c48b48|1697787060|1697787043',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
response = requests.get('https://www.zhihu.com/', headers=headers)
print(response.text)
2.1 selenium获取cookie
from selenium.webdriver import Chrome
# 1.用浏览器打开需要自动登陆的网站
b = Chrome()
b.get('https://www.zhihu.com/')
# 2.留足够长的时间让人工完成登录(浏览器对象指向的窗口中可以看到登陆成功后的信息)
input('是否已经完成登录:')
# 3.获取cookie并且保存到本地文件中,保存完就能用很长时间,除非cookie过期
cookies = b.get_cookies()
with open('files/知乎cookie.txt', 'w', encoding='utf-8') as f:
f.write(str(cookies))
2.2 selenium自动登录
from selenium.webdriver import Chrome
# 1.打开需要自动登录的网页
b = Chrome()
b.get('https://www.zhihu.com/')
# 2.添加cookie
# 1)获取cookie
with open('files/知乎cookie.txt', encoding='utf-8') as f:
cookies = eval(f.read())
# 2)将cookie添加到浏览器
for x in cookies:
b.add_cookie(x)
# 3.重新打开网页
b.get('https://www.zhihu.com/')
input()