爬虫入门之jsonPath PhantomJS与 selenium详解(六)

简介: 1 jsonPath数据格式pip安装: pip install jsonpath 用来解析json格式的字符串,类似于xpath(1) json对象的转换json.

1 jsonPath数据格式

pip安装: pip install jsonpath
用来解析json格式的字符串,类似于xpath

(1) json对象的转换
json.loads()
json.dumps()
json.load()
json.dump()

#直接读取json对象
json_obj = json.load(open('books.json','r',encoding='utf-8'))
print(json_obj) 

#先读取json字符串,再转json对象
with open('books.json','r',encoding='utf-8') as fp:
    json_str = fp.read()
json_obj = json.loads(json_str,encoding='utf-8')
print(json_obj)
(2) XPath与jsonPath格式对比
XPath JSONPath Description
/ $ 表示根元素
. @ 当前元素
/ . or [] 子元素
.. n/a 父元素
// .. 递归下降,JSONPath是从E4X借鉴的。
* * 通配符,表示所有的元素
@ n/a 属性访问字符
[] [] 子元素操作符
| [,] 连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。
n/a [start:end:step] 数组分割操作从ES4借鉴。
[] ?() 应用过滤表示式
n/a () 脚本表达式,使用在脚本引擎下面。
() n/a Xpath分组
XPath JSONPath 结果
/store/book/author $.store.book[*].author 书点所有书的作者
//author $..author 所有的作者
/store/* $.store.* store的所有元素。所有的bookst和bicycle
/store//price $.store..price store里面所有东西的price
//book[3] $..book[2] 第三个书
//book[last()] $..book[(@.length-1)] 最后一本书
//book[position()<3] $..book[0,1]``$..book[:2] 前面的两本书。
//book[isbn] $..book[?(@.isbn)] 过滤出所有的包含isbn的书。
//book[price<10] $..book[?(@.price<10)] 过滤出价格低于10的书。
//* $..* 所有元素。

2 selenium详解

支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试 ,selenium也是支持无界面浏览器操作的。比如说HtmlUnit和PhantomJs。

1.导入
    from selenium import webdriver
2.创建谷歌浏览器操作对象
    path = 谷歌浏览器驱动文件路径
    browser = webdriver.Chrome(path)
3.访问网址
    url = 要访问的网址
    browser.get(url)
    clear()  #清空
4.退出浏览器
    browser.quit()

元素定位

自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等,包含动态加载后的结果。操作这些元素前首先要找到它们,WebDriver提供很多定位元素的方法

#通过browser对象获取源码

find_element_by_id  #通过id
find_elements_by_name    #通过name
find_elements_by_xpath   #xpath路径
find_elements_by_tag_name  #标签名
find_elements_by_class_name   #类名
find_elements_by_css_selector  #css样式 
find_elements_by_link_text  #通过连接文本

my_input = browser.find_elements_by_css_selector('#kw')[0]  #通过选择器
browser.find_element_by_link_text("新闻")  #通过链接文本

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.page_source  # page_source 获取源码
driver.close()  # 关闭
driver.quit()  # 退出

driver.find_element_by_name('kw1')  #通过name属性查找
driver.find_element(by='name',value='kw1')  #通过名字
driver.find_element_by_xpath('//input[@name="kw1"]')  #通过xpath查找

kw1 = driver.find_element_by_css_selector('#wd1')  #selector查找
kw1.send_keys('海贼王')  #发送keys值
form_textfield = driver.find_element_by_name('username')
form_textfield.send_keys("admin")

访问元素信息

获取元素属性    .get_attribute('class')
获取元素文本    .text
获取id         .id
获取标签名      .tag_name

交互

# 点击click()
# 输入send_keys()
# 模拟JS滚动
    document.body.scrollTop=10000
    execute_script() 执行js代码

#示例
获取当前页面滚动条纵坐标的位置:
document.body.scrollTop

获取当前页面滚动条横坐标的位置:
document.body.scrollLeft

执行js代码
driver.execute_script(js_statement)   

#示例
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# 下拉滚动条,使浏览器加载出动态加载的内容
while True:
    # 可能像这样要拉很多次,中间要适当的延时
    # 如果说说内容都很长,就增大下拉的长度
    for i in range(10):
        driver.execute_script("window.scrollBy(0,1000)")  #每次下拉1000
        time.sleep(3)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")  #内容的总高度
    break

selenium登录知乎设置代理

#设置代理
from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
# 设置代理
chromeOptions.add_argument("--proxy-server=http://10.3.132.6:808")
# 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
browser = webdriver.Chrome(chrome_options=chromeOptions)

# 查看本机ip,查看代理是否起作用
browser.get("https://blog.csdn.net/zwq912318834/article/details/78626739")
print(browser.page_source)

# 退出,清除浏览器缓存
# browser.quit()

#模拟登录知乎
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.zhihu.com/')

# 点击登陆按钮
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div[2]/div/div/div/div[1]/div/div[1]/div[2]/button[1]').click()
time.sleep(2)

username = driver.find_element_by_name('username')
username.send_keys('18588403840')
time.sleep(1)
password = driver.find_element_by_name('password')
password.send_keys('Changeme_123')
time.sleep(5)
# driver.find_element_by_link_text('登录').click()
driver.find_element_by_xpath('/html/body/div[4]/div/span/div/div[2]/div/div/div/div[2]/div[1]/form/button').click()

driver.get('https://www.zhihu.com/people/zuo-zai-fen-tou-diao-xi-gui-82/activities')
print(driver.page_source)

selenium模拟登陆知乎

from selenium import webdriver
import time

# http://demo.smeoa.com/
def openURL():
  driver = webdriver.Chrome()
  driver.get("https://user.qzone.qq.com")
  time.sleep(6)
  login = driver.find_element_by_id('login_frame')
  driver.switch_to_frame(login)
  time.sleep(3)
  driver.find_element_by_id('switcher_plogin').click()

  username = driver.find_element_by_id('u')
  password = driver.find_element_by_id('p')
  username.send_keys('*****')
  password.send_keys('*****')
  time.sleep(3)
  driver.find_element_by_id('login_button').click()
  print("OK")

if __name__ == '__main__':
    openURL()

3 PhantomJS 无界面浏览器

Headless Chrome是Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行程序。相比于现代浏览器,Headless Chrome 更加方便测试web应用,获得网站的截图,做爬虫抓取信息等,也更加贴近浏览器环境。

Headless Chrome基于PhantomJS(QtWebKit内核)由谷歌Chrome团队开发。团队表示将专注研发这个项目

确保你的 chrome 浏览器版本是 60+

配置
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)

今日头条数据滚动自动加载

from selenium import webdriver
import time

path = 'phantomjs.exe'
driver = webdriver.PhantomJS(path)
url = 'https://www.toutiao.com/'
driver.get(url)
time.sleep(2)
driver.save_scre-enshot('1.png')

js = 'document.body.scrollTop=10000'
driver.execute_script(js)
time.sleep(2)
driver.save_screenshot('2.png')

driver.quit()
相关文章
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
2月前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
141 6
|
2月前
|
数据采集 存储 数据库
Python中实现简单爬虫的入门指南
【10月更文挑战第22天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步指导你如何使用Python编写一个简单的网络爬虫。我们将不展示代码示例,而是通过详细的步骤描述和逻辑讲解,帮助你理解爬虫的工作原理和开发过程。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往数据收集新世界的大门。
|
3月前
|
数据采集 Web App开发 JavaScript
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
本文介绍了如何使用Selenium爬虫技术抓取抖音评论,通过模拟鼠标悬停操作和结合代理IP、Cookie及User-Agent设置,有效应对动态内容加载和反爬机制。代码示例展示了具体实现步骤,帮助读者掌握这一实用技能。
169 0
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
|
3月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
4月前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
3月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
69 0
|
4月前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
5月前
|
数据采集 人工智能 数据可视化
Python selenium爬虫被检测到,该怎么破?
Python selenium爬虫被检测到,该怎么破?
931 8

热门文章

最新文章