• 爬虫总结


    爬取网站的思路

    1. 先确定是否为动态加载网站
    2. 找URL规律
    3. 正则表达式或xpath
    4. 定义程序框架,补全并测试代码

    多级页面数据抓取

    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 :<input>标签中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浏览器安装插件

    在线安装

    1. 下载插件 - google访问助手
    2. 安装插件 - google访问助手: Chrome浏览器-设置-更多工具-扩展程序-开发者模式-拖拽(解压后的插件)
    3. 在线安装其他插件 - 打开google访问助手 - google应用商店 - 搜索插件 - 添加即可

    离线安装

    1. 下载插件 - xxx.crx 重命名为 xxx.zip,解压不解压都可以,我没解压
    2. 打开Chrome浏览器 -> 右上角设置 -> 更多工具 -> 扩展程序 -> 点开开发者模式
    3. 把相关插件文件夹 拖拽 到浏览器中,释放鼠标即可安装
    4. 重启浏览器,使插件生效

    爬虫常用插件插件

    1. google-access-helper : 谷歌访问助手,可访问 谷歌应用商店
    2. Xpath Helper: 轻松获取HTML元素的xPath路径,开启/关闭: Ctrl + Shift + x
    3. Proxy SwitchyOmega: Chrome浏览器中的代理管理扩展程序
    4. JsonView: 格式化输出json格式数据

     

  • 相关阅读:
    android 多线程
    android调用 .net webService
    android apk程序升级
    android连数据库
    android事件
    android 服务
    android 活动
    (12)android控件-Advanced
    (11)android控件-Transitions
    (10) android控件-date
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/11360615.html
Copyright © 2020-2023  润新知