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

核心提示前面分享过《初学者必备|Python环境安装、第三方库的下载安装方法》,今天分享一个Python爬取网页中动态生成的内容的方法。关键词:爬取动态生成的网页内容一、简单类型:网页内容可直接获取这种情况相对比较简单,爬取步骤:1、用urllib

前面分享过《初学者必备|Python环境安装、第三方库的下载安装方法》,今天分享一个Python爬取网页中动态生成的内容的方法。

关键词:爬取动态生成的网页内容

一、简单类型:网页内容可直接获取

这种情况相对比较简单,爬取步骤:

1、用urllib.request库直接获取网页源码

2、用re库解析出需要的网页内容

3、对解析出的内容进行相关操作,比如下载

实例:爬取某贴吧中的图片,下为贴吧的部分截图

获取网页源码的源码:网页代码较大,建议不要打印。

右键,查看网页源代码,找到图片的地址,用re的正则表达式解析所有的图片地址。

技巧:可以在图片上右键,复制图片地址

在网页源代码页面用Ctrl+F调出搜索窗口,粘贴地址就可以快速定位到图片的地址处。

通过对比发现,网页中的图片地址都有统一的前缀和统一的后缀,如下图:

这个时候就可以用正则表达式获取地址了,正则表达式相对比较复杂,初学者只需要 理解二点就可以了,1、内是要获取的内容,左边是内容的前缀,右边是内容的后缀。2、.+?代表任意内容

最后一步,逐个下载获取的图片。

部分爬取结果:

源码:

import urllib.request

import re

url="http://tieba.baidu.com/p/2256306796" #网址

page=urllib.request.urlopen #获取网页

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

# 解析jpg图片url的正则表达式

jpgReg = re.compile" width')

# 注:这里最后加一个'width'是为了提高匹配精确度

# 解析出jpg的url列表

jpgs = re.findall)

i=0

for jpgurl in jpgs:

urllib.request.urlretrieve+".jpg")

i=i+1

二、复杂类型:网页完整内容是动态生成的

在实际爬取的过程,会碰到上面的爬取方法失效的情况。因为有些网站的内容是用JS脚本动态生成的,这时候获取的网页源码中并不包含动态生成的内容。以某个英语学习网为例,网页源代码中并不明显包含网页的内容。

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

C:UsersAdministratorAppDataLocalGoogleChromeApplication

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

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

1、利用Selenium访问网页,获得动态生成的网页源代码

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 #获取网页

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

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

#初始化webdriver

global driver

chrome_options = Options

chrome_options.add_argument

chrome_options.add_argument

driver_path = 'chromedriver.exe' #这里放的就是下载的driver本地路径

driver = webdriver.Chrome

driver.get #打开网址

#等待4秒钟,视网速和网页内容而定

time.sleep

html = driver.page_source # 获取获取网页源码

#设置正则表达式规则,并解析

mp3Reg = re.compile" class=') # 注:参看上面的截个图

contents.extend.decode))

for mp3url in contents:

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

# 关掉driver

driver.quit

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

码字不易,您的关注、转发、收藏都会给我无限动力!

 
友情链接
鄂ICP备19019357号-22