爬取js渲染或ajax加密的网页(万能方法)

requests库

Requests 是 Python 的第三方库,它的安装非常简便,如下所示:
python -m pip install requests
Requests 库是在 urllib 的基础上开发而来,它使用 Python 语言编写,并且采用了 Apache2 Licensed(一种开源协议)的 HTTP 库。与 urllib 相比,Requests 更加方便、快捷,因此在编写爬虫程序时 Requests 库使用较多。
但是有时要爬取的网站是由ajax传输数据或者js动态渲染的时候,requests库就显得没那么好用了,获取源代码时经常为空。
下面就要介绍到今天的主角,selenium库

selenium库

一、什么是Selenium

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

二、selenium基本使用

用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器

执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:

这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试。

其中最主要的使用方法就是通过selenium进行渲染之后获取渲染好的网页源码,就无须关心数据由本页面产生还是由接口产生。

三、selenium获取网页源代码

# 打开浏览器,请求一个带有动态内容的网页,等待js执行完毕(10秒钟足够),获取当前浏览器render的内容的源码,关闭浏览器

from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get('http://detail.tmall.com/item.htm?id=12577759834 ')
time.sleep(10)
pageSource = browser.page_source
print pageSource
browser.close()

实例(requests与selenium)

from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup

# # 传统获取网页源代码操作
# respone = requests.get("https://spa2.scrape.center/page/1")
# html = respone.text

# ====================================================
# 万能操作
browser = webdriver.Chrome()
browser.get("https://spa2.scrape.center/page/1")
# 等待10s,让网页所有js全部加载完全
time.sleep(10)
# 获取网页源代码
html = browser.page_source

soup = BeautifulSoup(html,'html.parser')
print(soup.find_all("h2",class_='m-b-sm'))
posted @ 2022-10-24 20:02  又一岁荣枯  阅读(295)  评论(0编辑  收藏  举报