使用Selenium+Chromedriver模拟浏览器行为获取数据

关于Ajax的响应结果的获取

 ## 我这里用的方法是Selenium+Chromedriver模拟浏览器

Selenium

1. Selenium

 1.什么是selenium?
	(1)Selenium是一个用于Web应用程序测试的工具。
	(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
	(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,ChromeDriver)驱动真实浏览器完成测试。
	(4)selenium也是支持*面浏览器操作的。
2.为什么使用selenium?
  模拟浏览器功能,自动执行网页中的js代码,实现动态加载
3.如何安装selenium?
	(1)操作谷歌浏览器驱动下载地址
	http://chromedriver.storage.googleapis.com/index.html
	(2)谷歌驱动和谷歌浏览器版本之间的映射表
	http://blog.csdn.net/huilan_same/article/details/51896672
	(3)查看谷歌浏览器版本
	谷歌浏览器右上角‐‐>帮助‐‐>关于
	(4)pip install selenium(安装pyinstaller中详细介绍了怎么用命令行安装模块)
4.selenium的使用步骤?
	(1)导入:from selenium import webdriver
	(2)创建谷歌浏览器操作对象:
	path = 谷歌浏览器驱动文件路径
	browser = webdriver.Chrome(path)
	(3)访问网址
	url = 要访问的网址
	browser.get(url)

以百度贴吧为例,学习简单的Selenium+Chromedriver的使用**

	**这里解析我用的是xpath+XPath Helper ,也可以用正则**
贴吧中帖子信息获取
要求:
    1 用户输入吧名,获得第一页中所有的帖子
    2 帖子需要包含:名称,作者,最后回复人
    3 将帖子信息保存成到文件中
    
过程:利用selenium加Chromedriver模拟浏览器行为获取数据(我获取的实时数据)ajax请求
     chromedriver.exe我是用了自己电脑版本的,
     先通过模拟浏览器搜索自己要搜的页面,然后再获取自己想要的数据(数据解析我是用了xpath以及XPath Helper插件)
     
难点:要获取的数据是Ajax请求的

代码如下:

from lxml import etree
from selenium import webdriver

if __name__ == '__main__':
    name = input("请输入要搜索的贴吧名称:")
    # 进行转码
    # name=urllib.parse.urlencode(name)
    url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&pn=0".format(name)
    path = "chromedriver.exe"
    browser = webdriver.Chrome(path)
    # 类似于requests.get(url)
    browser.get(url)
    content = browser.page_source
    print(content)
    tree = etree.HTML(content)
    li_list = tree.xpath('//div/ul[@id="thread_list"]/li')
    message=[]
    for i in range(1, len(li_list)):
        mes = {}
        # 这里着实写的有些复杂,不过我是一步一步的 可以自己改良
        name = li_list[i].xpath('./div/div[2]/div[1]/div[1]/a/text()')[0]
        author = li_list[i].xpath('./div/div[2]/div[1]/div[2]/span[1]/@title')[0].split(':')[1]
        final_res = li_list[i].xpath('./div/div[2]/div[2]/div[2]/span[1]/@title')[0].split(':')[1]
        mes["名称"]=name
        mes["作者"]=author
        mes["最后回复人"]=final_res
        message.append(mes)
    with open("贴吧.json",'w',encoding='utf-8')as fp:
        fp.write(str(message))

在这里插入图片描述
使用Selenium+Chromedriver模拟浏览器行为获取数据

json数据格式化快捷键:ctrl+alt+L

使用Selenium+Chromedriver模拟浏览器行为获取数据

上一篇:标记(TAG)您的阿里云ECS资源


下一篇:Http-01