标签:切换 cookies 处理 googl 重命名 font 参数 re模块 链接
多级页面数据抓取
1、爬取一级页面,提取所需数据+链接,继续跟进
2、爬取二级页面,提取所需数据+链接,继续跟进
3、...
爬虫代码规范书写:
# 程序结构 class xxxSpider(object): def __init__(self): # 定义常用变量,url,headers及计数等 def get_html(self): # 获取响应内容函数,使用随机User-Agent def parse_html(self): # 使用正则表达式来解析页面,提取数据 def write_html(self): # 将提取的数据按要求保存,csv、MySQL数据库等 def main(self): # 主函数,用来控制整体逻辑 if __name__ == ‘__main__‘: # 程序开始运行时间戳 start = time.time() spider = xxxSpider() spider.main() # 程序运行结束时间戳 end = time.time() print(‘执行时间:%.2f‘ % (end-start))
一般被关注的变量是userAgent和Referer和Cookie,可以考虑用浏览器中
1、发送请求携带请求头: headers={‘User-Agent‘ : ‘Mozilla/5.0 xxxxxx‘}
User-Agent限制:网站可能会判断当某一个User-Agent高频率访问的时候,会加以限制。
解决方法:
1、定义列表存放大量User-Agent,使用random.choice()每次随机选择
2、定义py文件存放大量User-Agent,使用random.choice()每次随机选择
3、使用fake_useragent每次访问随机生成User-Agent
from fake_useragent import UserAgent ua = UserAgent() user_agent = ua.random print(user_agent)
IP限制:网站根据IP地址访问频率进行反爬,短时间内进制IP访问
解决方案:
1、构造自己IP代理池,每次访问随机选择代理,经常更新代理池
2、购买开放代理或私密代理IP
3、降低爬取的速度
Cookies:建立有效的Cookie池,每次访问随机切换
1、适用网站类型: 爬取网站页面时需要登录后才能访问,否则获取不到页面的实际响应数据
2、方法1(利用cookie)
1、先登录成功1次,获取到携带登陆信息的Cookie(处理headers)
2、利用处理的headers向URL地址发请求
3、方法2(利用session会话保持)
1、实例化session对象
session = requests.session()
2、先post : session.post(post_url,data=post_data,headers=headers)
1、登陆,找到POST地址: form -> action对应地址
2、定义字典,创建session实例发送请求
# 字典key :<input>标签中name的值(email,password)
# post_data = {‘email‘:‘‘,‘password‘:‘‘}
3、再get : session.get(url,headers=headers)
验证码:验证码数量较少可人工填写,图形验证码可使用tesseract识别,其他情况只能在线打码、人工打码和训练机器学习模型
1、html页面中可匹配出内容,程序中匹配结果为空
2、如果数据出不来可考虑更换 IE 的User-Agent尝试,数据返回最标准
From表达数据认证(salt、sign)签名及js加密:一般为本地JS加密,查找本地JS文件,分析,或者使用execjs模块执行JS
js调整页面结构
js在响应中指定新地址:从响应代码中找目标地址,政府行政编码
动态加载的数据,数据不再网页代码中,而是在后台的异步加载的数据包中。
1、F12打开控制台,页面动作抓取网络数据包
2、抓取json文件URL地址
# 控制台中 XHR :异步加载的数据包
# XHR -> Query String(查询参数)
urllib库使用流程
# 编码 params = { ‘‘:‘‘, ‘‘:‘‘ } params = urllib.parse.urlencode(params) url = baseurl + params ? # 请求 request = urllib.request.Request(url,headers=headers) response = urllib.request.urlopen(request) html = response.read().decode(‘utf-8‘)
requests模块使用流程
baseurl = ‘http://tieba.baidu.com/f?‘ html = requests.get(baseurl,params=params,headers=headers).content.decode(‘utf-8‘,‘ignore‘)
写程序最终目的:程序不要因为任何异常而终止,页面请求设置超时时间,并用try捕捉异常,超过指定次数更换下一个url地址
import re ? pattern = re.compile(‘正则表达式‘,re.S) r_list = pattern.findall(html)
from lxml import etree ? parse_html = etree.HTML(res.text) r_list = parse_html.xpath(‘xpath表达式‘)
# json # 响应内容由json转为python html = json.loads(res.text) # 所抓数据保存到json文件 with open(‘xxx.json‘,‘a‘) as f: json.dump(item_list,f,ensure_ascii=False) # 或 f = open(‘xxx.json‘,‘a‘) json.dump(item_list,f,ensure_ascii=False) f.close()
在线安装
离线安装
爬虫常用插件插件
标签:切换 cookies 处理 googl 重命名 font 参数 re模块 链接
原文地址:https://www.cnblogs.com/LXP-Never/p/11360615.html