目录 爬取网站的思路 常见的反爬总结   基于User-Agent反爬   响应内容前端JS做处理反爬   动态生成 请求模块总结 解析模块总结   正则解析re模块   lxml解析库   json   Chrome浏览器安装插件 爬取网站的思路 先确定是否为动态加载网站 找URL规律 正则表达式或xpath 定义程序框架,补全并测试代码 多级页面数据抓取 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)) 复制代码 常见的反爬总结 基于User-Agent反爬 一般被关注的变量是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 :标签中name的值(email,password)       # post_data = {'email':'','password':''}   3、再get : session.get(url,headers=headers) 验证码:验证码数量较少可人工填写,图形验证码可使用tesseract识别,其他情况只能在线打码、人工打码和训练机器学习模型 响应内容前端JS做处理反爬 1、html页面中可匹配出内容,程序中匹配结果为空 响应内容中嵌入js,对页面结构做了一定调整导致,通过打印查看网页源代码,格式化输出查看结构,更改xpath或者正则测试 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地址 scrapy框架爬虫 selenium+browser爬虫 解析模块总结 正则解析re模块 复制代码 import re ​ pattern = re.compile('正则表达式',re.S) r_list = pattern.findall(html) 复制代码 lxml解析库 复制代码 from lxml import etree ​ parse_html = etree.HTML(res.text) r_list = parse_html.xpath('xpath表达式') 复制代码 json 复制代码 # 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() 复制代码 Chrome浏览器安装插件 在线安装 下载插件 - google访问助手 安装插件 - google访问助手: Chrome浏览器-设置-更多工具-扩展程序-开发者模式-拖拽(解压后的插件) 在线安装其他插件 - 打开google访问助手 - google应用商店 - 搜索插件 - 添加即可 离线安装 下载插件 - xxx.crx 重命名为 xxx.zip,解压不解压都可以,我没解压 打开Chrome浏览器 -> 右上角设置 -> 更多工具 -> 扩展程序 -> 点开开发者模式 把相关插件文件夹 拖拽 到浏览器中,释放鼠标即可安装 重启浏览器,使插件生效 爬虫常用插件插件 google-access-helper : 谷歌访问助手,可访问 谷歌应用商店 Xpath Helper: 轻松获取HTML元素的xPath路径,开启/关闭: Ctrl + Shift + x Proxy SwitchyOmega: Chrome浏览器中的代理管理扩展程序 JsonView: 格式化输出json格式数据 作者:凌逆战 欢迎任何形式的转载,但请务必注明出处。 限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。https://www.cnblogs.com/LXP-Never/p/11360615.html