用Selenium+Chromedriver来爬取Ajax异步请求数据

用Selenium+Chromedriver来爬取Ajax异步请求数据

  • Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

  • Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

  • Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

  • 可以从 PyPI 网站下载 Selenium库https://pypi.python.org/simple/selenium ,也可以用 第三方管理器 pip用命令安装:pip install selenium

  • Selenium 官方参考文档:http://selenium-python.readthedocs.io/index.html

Chromedriver

  • 点击下载chrome的webdriver: http://chromedriver.storage.googleapis.com/index.html,目前只有32位的。
朋友让我帮爬一个数据,发现网页数据竟然是异步加载,想到好久没用的Selenium,正好用一下 ,直接上代码
import time
import requests
from lxml import etree
from selenium import webdriver
# 获取网页html
def driver_html(url):
	# 新建一个chrome浏览器 executable_path=chromedriver.exe地址
	driver = webdriver.Chrome(executable_path= r'C:\chromedriver.exe')
	# 打开网页
	driver.get(url)
	# 单击想要的内容
	driver.find_element_by_xpath('//li[@val="4"]').click()
	time.sleep(5)
	# 获取网页源码
	html = driver.page_source
	return get_url(html)
	
# 获取url列表
def get_url(html):
	req = etree.HTML(html)
	title = req.xpath('//div[@class="publicont"]//a//text()')
	urls = req.xpath('//div[@class="publicont"]//a//@href')
	html_dict = dict(zip(title, urls))
	url_info(html_dict)

# 获取url详情页
def url_info(r):
	headers = {
     
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
	}
	for title,url in r.items():
		new_url = 'https://www.fjggfw.gov.cn/Website/'+url
		req = requests.get(new_url,headers=headers)
		res = req.text
#再用一轮xpath匹配就可以匹配到所需内容,不在啰嗦
		
if __name__ == '__main__':
	# 初始url
	url = "https://www.fjggfw.gov.cn/Website/JYXXNew.aspx"
	driver_html(url)

** 会不定期更新内容,欢迎关注,一起进步,谢谢! **

你可能感兴趣的:(python)