测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0html
测试网址:http://tieba.baidu.com/p/2827883128python
目的是下载该网页下全部图片,共160+张。能够分为如下几步:web
一、获取网页源代码。ajax
发现直接经过urllib2或者request获取到的源代码和实际图片对应不起来,经过chrome审查元素功能能够查询到对应的图片,猜想是该页面的图片加载是经过ajax异步传输的。所以使用工具selenium + chromedriver实现。安装好selenium+chromedriver以后,便可获取到须要的源代码。正则表达式
二、分析获取到的源代码,找出图片的实际地址而后下载。过程与python爬虫2——下载文件相似。以前分析源码都是直接经过正则表达式实现,建议学习下beautifulsoup(如今就去),更方便。chrome
实际程序运行后发现,只能获取到40张图片。缘由是页面加载完成后,只有40张图片。若是须要获取所有图片,须要在页面加载完成以前,手动往下滑动滚轮,以后浏览器继续发送ajax请求给服务器,获取其余的图片。该方法实际测试可行,能够获取所有图片。浏览器
可是!手动操做这种方法太low了!如下是个人猜测:一、是否能够直接经过分析源代码中的js部分,直接提取出全部向后台服务器发送ajax请求的代码,一次性发送出去从而获得全部图片的地址? 二、是否能够经过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()