爬虫入门之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()
相关文章
|
3月前
|
数据采集 Web App开发 数据挖掘
利用Python和Selenium实现定时任务爬虫
利用Python和Selenium实现定时任务爬虫
|
7天前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
1月前
|
数据采集 Web App开发 XML
爬虫进阶:Selenium与Ajax的无缝集成
爬虫进阶:Selenium与Ajax的无缝集成
|
3月前
|
数据采集 Web App开发 搜索推荐
突破目标网站的反爬虫机制:Selenium策略分析
突破目标网站的反爬虫机制:Selenium策略分析
|
4天前
|
数据采集 监控 数据安全/隐私保护
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
在Selenium Web数据采集时,日志管理至关重要。通过调整`–log-level`参数可优化日志详细度,如设置为`INFO`记录一般操作信息。结合代理IP、Cookie及user-agent配置,不仅能提高采集成功率,还能规避反爬机制。合理选择日志级别有助于调试与性能平衡,在复杂的数据采集任务中保持程序稳定与可控。
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
|
1月前
|
数据采集 Python
揭秘淘宝商品信息:Python爬虫技术入门与实战指南
Python爬虫用于获取淘宝商品详情,依赖`requests`和`beautifulsoup4`库。安装这两个库后,定义函数`get_taobao_product_details`,发送GET请求模拟浏览器,解析HTML获取标题和价格。注意选择器需随页面结构更新,遵守爬虫政策,控制请求频率,处理异常,且数据只能用于合法目的。
|
3月前
|
数据采集 前端开发 JavaScript
Python爬虫入门
网络爬虫是自动抓取网页数据的程序,通过URL获取网页源代码并用正则表达式提取所需信息。反爬机制是网站为防止爬取数据设置的障碍,而反反爬是对这些机制的对策。`robots.txt`文件规定了网站可爬取的数据。基础爬虫示例使用Python的`urllib.request`模块。HTTP协议涉及请求和响应,包括状态码、头部和主体。`Requests`模块是Python中常用的HTTP库,能方便地进行GET和POST请求。POST请求常用于隐式提交表单数据,适用于需要发送复杂数据的情况。
42 1
|
3月前
|
数据采集 Web App开发 JavaScript
Selenium与PhantomJS:自动化测试与网页爬虫的完美结合
Selenium与PhantomJS:自动化测试与网页爬虫的完美结合
|
2月前
|
数据采集 存储 Web App开发
Python爬虫实战:从入门到精通
Python是开发网络爬虫的首选语言,因其简洁语法和丰富库如requests, BeautifulSoup, Scrapy。爬虫涉及HTTP交互、HTML解析及法律道德问题。以下是爬取豆瓣电影Top250的步骤:确定目标,分析网站,安装必要库(requests, BeautifulSoup),编写代码抓取电影名称、评分和简介,处理异常并优化,如设置请求间隔、使用代理IP和遵循Robots协议。
|
3月前
|
数据采集 存储 Web App开发
网页爬虫开发:使用Scala和PhantomJS访问知乎
网页爬虫开发:使用Scala和PhantomJS访问知乎

热门文章

最新文章