Chrome|Python爬虫实例|爬取动态生成的网页内容( 二 )



jpgs = re.findall(jpgReghtml.decode('utf-8'))
i=0

for jpgurl in jpgs:
urllib.request.urlretrieve(jpgurl\"pic/\"+str(i)+\".jpg\")
i=i+1
二、复杂类型:网页完整内容是动态生成的
在实际爬取的过程 , 会碰到上面的爬取方法失效的情况 。 因为有些网站的内容是用JS脚本动态生成的 , 这时候获取的网页源码中并不包含动态生成的内容 。 以某个英语学习网为例 , 网页源代码中并不明显包含网页的内容 。

这时候就需要祭出Selenium了 , Selenium是一个用于测试网站的自动化测试工具 , 支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器 , 同时也支持phantomJS无界面浏览器 。 简单的说就是Selenium可以模拟访问网页 , 并获得最终的结果 。 使用Selenium之前还要安装有一个webdriver驱动文件 , 下载好Chrome驱动文件chromedrive.exe后 , 可以直接放在谷歌浏览器的安装目录下 。
C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application


下载的时候 , 一定要下载自己谷歌浏览器的对应版本 。 下载地址如下:

这时候爬取的思路就要进行调整:

1、利用Selenium访问网页 , 获得动态生成的网页源代码(安装后 , Python源码要关闭重新打开才能生效 , 本人的教训)
2、在源代码中找到需要的内容的格式并解析 , 然后下载 。

这里边涉及到一个小技能 , 如何查看动态网页的源码:方法就是右键里的检查功能 。


选中右边的Elements标签页 , 就可以看到网页的全部真实源代码 。

鼠标在右边的代码上移动 , 左边就会选中对应的内容块 , 非常直观 。


找到自己需要的内容块后 , 展开右边的代码 。

调整后的源码如下:


执行过程出现一个黑色的窗口就表示成功调用


爬取的部分内容列表截图 , 这个地址前要加上网站的前缀拼成完整的地址 , 进行二次爬取 。

源码:开头的#要去掉 , 不然程序出错 。 不加上我就违规了

#import urllib.request
#import re
import time #sleep()函数
from selenium import webdriver

from selenium.webdriver.chrome.options import Options
url=\"不能加的\" #网址

#page=urllib.request.urlopen(url) #获取网页

#html=page.read() #获取网页源码

contents=[
#保存获取的音乐地址列表

#初始化webdriver

global driver
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver_path = 'chromedriver.exe' #这里放的就是下载的driver本地路径
driver = webdriver.Chrome(chrome_options=chrome_options executable_path = driver_path)
driver.get(url) #打开网址
#等待4秒钟 , 视网速和网页内容而定
time.sleep(4)
html = driver.page_source # 获取获取网页源码
#设置正则表达式规则 , 并解析

mp3Reg = re.compile(r' href=https://mparticle.uc.cn/"(.+?)\" class=') # 注:参看上面的截个图
contents.extend(re.findall(mp3Reghtml.encode(\"utf-8\").decode('utf-8')))
for mp3url in contents:

print(mp3url) #这里只是简单打印 , 实际还要再解析一次获得mp3真实地址
# 关掉driver

driver.quit()
后记:以上就是Python爬取网页内容二种方法 , 不足之处欢迎留言讨论交流 。

【Chrome|Python爬虫实例|爬取动态生成的网页内容】码字不易 , 您的关注、转发、收藏都会给我无限动力!