avatar

目录
python爬虫(2)-动态HTMl处理

本文档由脑图导出,地址:Spider脑图

参考:heima

[TOC]

Spider

动态HTML处理

爬取动态HTML数据

  • 后续爬虫代码建议

    • 减少请求次数
    • 关注所有类型的页面
    • 多伪装
    • 多线程分布式
  • 动态HTML技术:略

  • Selenium和PhantomJS

    Selenium

    • Web的自动化测试工具,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏

    PhantomJS

    • “无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript

    demo: 模拟浏览器百度搜索

    python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    from selenium import webdriver
    import time
    import pprint
    # 实例化浏览器
    # 调用的是本地Chrome浏览器,如果是有界面浏览器,就会看到控制效果
    # webdriver.PhantomJS() #无界面浏览器
    driver = webdriver.Chrome("./chromedriver")
    # 发送请求
    driver.get("http://www.baidu.com")

    # 输入关键字
    driver.find_element_by_id("kw").send_keys("python")
    # 点击搜索
    driver.find_element_by_id("su").click()

    # 获取click之后的url
    new_url = driver.current_url
    # 获取Cookie
    cookies = driver.get_cookies()
    print(cookies)
    # 字典推导式
    cookies = {i["name"]: i["value"] for i in cookies}
    print(cookies)

    # 获取html字符串
    html_str = driver.page_source # 浏览器中elements的内容

    time.sleep(5)
    # 退出当前页面
    driver.close()
    # 退出浏览器
    driver.quit()

案例-网站模拟登录

模拟登录豆瓣网

打码平台

验证码

  • url不变,验证码不变
  • url不变,验证码会变
    • 使用session1请求,获取验证码地址(这时验证码已经被请了一次 c1),这时后台的session1与c1绑定
    • 使用session1请求验证码,识别(这是第二次 c2), 这时session1与c2的验证码在后台绑定了
    • session1发送post请求,将c2发到后台。
    • 如果:使用request会怎样?2次请求是不同的session,对应不起来
    • 另一种方法,截屏,然后截取验证码模块交给打码接口识别

selenium补充

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from selenium import webdriver
driver = webdriver.Chrome("./chromedriver")

driver.get("http://www.baidu.com")


driver.find_element_by_xpath("").text
driver.find_element_by_xpath("").get_attribute("href")
driver.find_elements_by_xpath("") # 返回list
driver.find_element_by_link_text("下一页>").get_attribute("href")
# 文本链接包含"下一页"
driver.find_element_by_partial_link_text("下一页").get_attribute("href")
driver.find_element_by_tag_name("div")
driver.find_element_by_class_name("")
driver.find_element_by_css_selector("")

# 切换到iframe
# 如果页面中含有iframe, frame ,需要先切换
driver.switch_to.frame("login_frame")
driver.find_element_by_id("u").send_keys("123456")


# selenium翻页之后不会等待加载完毕,会直接获取数据,这时会报错
# 解决:time.sleep(3)

Tesseract简要

Tesseract

  • Tesseract是一个将图像翻译成文字的OCR库(光学文字识别,Optical Character Recognition)

  • 安装:sudo apt-get install tesseract-ocr

  • 在python中调用Tesseract:pip3 install pytesseract

  • 终端:tesseract test.jpg text

  • py代码:

    • demo

      python
      1
      2
      3
      4
      import pytesseract
      from PIL import Image
      image = Image.open(jpg)
      pytesseract.image_to_string(image)

案例-使用selenium爬豆瓣小组

文章作者: Machine
文章链接: https://machine4869.gitee.io/2019/02/28/20190228113234928/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论