• python爬虫3——获取审查元素(板野友美吧图片下载)


    测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0

    测试网址:http://tieba.baidu.com/p/2827883128

    目的是下载该网页下所有图片,共160+张。可以分为以下几步:

    1、获取网页源代码。

    发现直接通过urllib2或者request获取到的源代码和实际图片对应不起来,通过chrome审查元素功能可以查询到对应的图片,猜测是该页面的图片加载是通过ajax异步传输的。因此使用工具selenium + chromedriver实现。安装好selenium+chromedriver之后,即可获取到需要的源代码。

    2、分析获取到的源代码,找出图片的实际地址然后下载。过程与python爬虫2——下载文件类似。之前分析源码都是直接通过正则表达式实现,建议学习下beautifulsoup(现在就去),更方便。

    实际程序运行后发现,只能获取到40张图片。原因是页面加载完成后,只有40张图片。如果需要获取全部图片,需要在页面加载完成之前,手动往下滑动滚轮,之后浏览器继续发送ajax请求给服务器,获取其他的图片。该方法实际测试可行,可以获取全部图片。

    但是!手动操作这种方法太low了!以下是我的猜想:1、是否可以直接通过分析源代码中的js部分,直接提取出所有向后台服务器发送ajax请求的代码,一次性发送出去从而得到所有图片的地址? 2、是否可以通过js或者selenium,在加载页面的时间段,模拟滚轮动作,从而实现功能。方法2我实际测试了下,由于水平有限,不熟悉js,没有成功。附代码:

    # -*- coding: utf-8 -*-
    import requests
    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    url = "http://tieba.baidu.com/p/2827883128"
    driver.get(url)
    try:
        # driver.implicitly_wait(20)
        # driver.find_element_by_id("ag_main_bottombar")
        # js="var q=document.body.scrollTop=10000"
        # driver.execute_script(js)
        sourcePage = driver.page_source
        soup = BeautifulSoup(sourcePage, "lxml")
        images = soup.find_all(class_ = "ag_ele_a ag_ele_a_v")
        print(len(images))
        for image in images:
            print(image)
    finally:
        # pass
        driver.quit()
  • 相关阅读:
    北京东城区社保转出业务个人办理图解流程,需要的朋友可以参考
    微信自定义菜单代码实现
    那你就是不对称加密了
    数字签名和数字认证
    微信认证开发教程
    Eclipse配置Maven
    php随笔
    让SAE下的wordpress支持文件上传
    HTTP Header 详解
    浅谈JS DDoS攻击原理与防御
  • 原文地址:https://www.cnblogs.com/everSeeker/p/5023699.html
Copyright © 2020-2023  润新知