zoukankan      html  css  js  c++  java
  • Spider-three

    一、selenium

    from selenium import webdriver

    driver = webdriver.Chrome() # 创建一个chrome浏览器控制对象
    #driver = webdriver.PhantomJS() # 创建一个phantomjs无界面浏览器

    driver.get("http://www.baidu.com/") # 使用浏览器发送请求

    html = driver.page_source # 获取网页的源代码(已经渲染完成的源代码)

    driver.save_screenshot("test.png") # 将网页保存为图片

    driver.quit() # 关闭浏览器

    html_obj = etree.HTML(html)


    # 32 位: 最大的内存寻址范围是 2 的 32次方
    # 64 位: 最大的内存寻址范围是 2 的 64次方


    ChromeDriver的作用是:可以调用电脑上的真实Chrome浏览器。

    Chrome默认是有界面的浏览器,所以支持复杂的鼠标和键盘事件(比PhantomJS更方便)
    Chrome也支持无界面(headless)模式:

    from selenium import webdriver

    options = webdriver.ChromeOptions()

    options.add_argument("--headless")
    # 无界面模式(更节约资源)
    driver = webdriver.Chrome(chrome_options=options)
    # 有界面模式(支持复杂的鼠标键盘事件)
    driver = webdriver.Chrome()

    # 获取渲染后的网页源码,可以通过xpath提取数据
    html = driver.page_source

     

    Python第三方模块安装方式:
    1. 在线安装: pip install xxxx
    2. 离线包安装: pip install xxxx_1.23.whl
    3. 源码安装: python setup.py install


    第三方库fake_useragnet 随机生成User-Angent : "https://pypi.org/project/fake-useragent/"
    注意: 第一次随机生成浏览器user_agent信息时, 如果出现报错, 是因为第一次获取时是从缓存中获取的, 但第一次获取没有缓存, 第一次生成时需要修改参数: verify_ssl=False 之后就可不用修改

     

    二、网站反爬顾忌: 误伤真实用户
    爬虫爬取数据: 爬虫道德(尽量降低对方服务器负载,也可以保护自身)
    反爬手段:
    通过User-Agent来反爬, 使用faker模块
    通过Referer来反爬, 在请求时添加Referer
    通过Cookie来反爬, 携带cookie发送请求
    通过js加密请求参数来反爬, python重写js代码的功能、或执行js代码拿到结果
    通过行为验证来反爬, 使用打码平台或深度学习的方式破解验证码
    通过ip地址来反爬, IP代理池、网上获取免费的代理ip

     

    三、验证码的三种解决办法
    1. 手动打码:将验证码图片下载下来,手动打开并输入正确的验证码,提交请求参数。
    2. OCR(光学字符识别系统):读取图片上的文字,并返回一个字符串(识别会有精确度问题)
    # Google处理的 Tesseract OCR
    3. 打码平台:将验证码图片上传给打码平台处理,打码平台返回验证结果(收费)

    Python解释器(CPython解释器)拥有小整数对象池 : -5 ~ 256 之间 如果值相同则id相同, 比如终端执行python文件
    IDE中的解释器做了优化处理,但凡是值一致,内存地址就一样

     


    四、案例: 斗鱼直播爬取所有主播信息

    "https://www.douyu.com/directory/all"

    # 定位到 所有主播的大项
    ul_element = xpath("//ul[@class='layout-Cover-list']")[1]
    # 提取所有主播的每一个主播信息,并返回列表(一页120个)
    div_list = ul_element.xpath('.//div[@class="DyListCover-content"]')

    for div in div_list:
    category_name = div.xpath(".//span[@class='DyListCover-zone']")[0]
    room_name = div.xpath('.//h3[@class="DyListCover-intro"]')[0]
    people_number = xpath('.//span[@class="DyListCover-hot"]')[0]
    directory_name = xpath('.//h2[@class="DyListCover-user"]')[0]

     


    五、案例: 人人网登陆

    1. 发送GET请求: http://activity.renren.com/livecell/rKey

    n = json.loads(response.content)['data']

    2. 提供账户名和密码
    phoneNum: mr_mao_hacker@163.com
    password: ALARMCHIME

    3. 执行js:
    三个js文件: Bigint.js 、RSA.js 、Barrett.js
    一段js代码:
    '''
    t.password = t.password.split("").reverse().join(""), setMaxDigits(130);
    var o = new RSAKeyPair(n.e,"",n.n), r = encryptedString(o, t.password);
    t.password = r, t.rKey = n.rkey'''

    4. 提取js执行结果,获取 password 和 rkey 登录参数:

    phoneNum: mr_mao_hacker@163.com
    password: 83ac1c99378609e178cab3ece815d36c12b5ca094300333e83ea5436b6109fb2
    c1: 0
    rKey: 56c61d35789ce0326162a224b59725f3

    5. 发送登录的POST请求: http://activity.renren.com/livecell/ajax/clog

     

    六、 其他
    python 强类型 动态 解释型语言
    弱类型 静态 编译型语言

    js : "hello" + 123 --> 弱类型: 字符串和整型可相加

    动态:程序在运行时确定数据类型,创建变量不需要声明类型
    静态:程序在运行前确定数据类型,创建变量必须声明类型

    解释型语言: 程序执行时,通过解释器按行执行代码,实现不会检查整个代码的BUG,只有运行时才检查代码BUG
    编译型语言: 程序执行前,先通过编译器生成 可执行文件(机器码文件),在编译过程中检查代码BUG,如果有BUG编译失败,如果编译成功,运行可执行文件即可。


    运行速度:
    4. 解释型语言(Python、Ruby、JS)
    3. 编译型语言(C++、 Java、 C#)
    2. C语言 代码映射汇编
    1. 汇编代码 可以操作机器码,并通过助记词编写代码
    0. 机器码 010101011100


    Python自带的模块: /usr/lib/pythonx.x/
    Python第三方的模块: /usr/local/lib/pythonx.x/site-packages/
    /dist-packages/

     

  • 相关阅读:
    产品团队管理
    产品版本规划
    gitlab服务器IP调整后修改domian或ip
    Linux服务器性能分析与调优
    linux设置别名连接远程服务器
    Yaml文件
    Alias采样算法
    Graph embedding(2)----- DeepWalk、Node2vec、LINE
    python学习(32)---networkx
    python报错
  • 原文地址:https://www.cnblogs.com/hsmwlyl/p/10630347.html
Copyright © 2011-2022 走看看