如何利用cef浏览器抓取网站表格内容?cefpython3

优采云 发布时间: 2023-04-12 10:33

  cef浏览器是一款基于Chromium开源项目的开源浏览器,可以无需显示界面运行,提供强大的网页渲染能力和JavaScript执行环境,被广泛应用于自动化测试、数据采集等领域。本文将介绍如何利用cef浏览器抓取网站表格内容,并在此基础上打造高效采集利器。

  一、安装cefpython3

  cefpython3是Python下的一个cef浏览器封装库,提供了完整的cef浏览器API接口,并支持Python脚本操作浏览器。在开始之前,需要先安装cefpython3。

   python

pip install cefpython3

  二、启动cefpython3

  启动cefpython3需要先创建一个窗口对象,并指定初始URL和窗口大小。以下代码演示了如何启动一个简单的窗口:

   python

import cefpython3 as cef

#创建窗口对象

window_info = cef.WindowInfo()

window_info.SetAsOffscreen(0)

browser = cef.CreateBrowserSync(window_info=window_info, url="https://www.ucaiyun.com/", window_title="优采云")

#设置窗口大小

browser.SetClientSize(1366, 768)

#进入消息循环

cef.MessageLoop()

  以上代码创建了一个窗口对象,并在窗口中打开了优采云的官网。在此基础上,可以通过调用browser对象的方法,模拟用户操作浏览器,实现数据采集。

  三、定位表格元素

  在抓取网站表格内容之前,需要先找到表格所在的HTML元素,并获取其内容。定位HTML元素可以使用浏览器提供的开发者工具,在其中执行JavaScript代码来获取元素信息。

  以下是一个示例代码,用于获取百度搜索结果页面的第一个搜索结果:

   python

import cefpython3 as cef

#创建窗口对象

window_info = cef.WindowInfo()

window_info.SetAsOffscreen(0)

browser = cef.CreateBrowserSync(window_info=window_info, url="https://www.baidu.com/s?wd=cefpython3", window_title="")

#进入消息循环

cef.MessageLoop()

#获取第一个搜索结果标题

script ="""

var result = document.querySelector(".result");

var title = result.querySelector(".t").innerText;

title;

"""

browser.ExecuteFunction("GetTitle", script)

  以上代码在百度搜索页面执行了一个JavaScript脚本,获取了第一个搜索结果的标题,并将其传递给Python程序。

  四、解析表格内容

  获取到表格元素后,需要对其内容进行解析并提取所需数据。对于简单的表格,可以直接使用Python内置的HTML解析库BeautifulSoup进行解析。

  以下是一个示例代码,用于解析HTML中的一个简单表格,并输出其中的数据:

   python

from bs4 import BeautifulSoup

html ="""

<table>

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

</tr>

<tr>

<td>张三</td>

<td>18</td>

<td>男</td>

</tr>

<tr>

<td>李四</td>

<td>22</td>

<td>女</td>

</tr>

</table>

"""

soup = BeautifulSoup(html,"html.parser")

table = soup.find("table")

rows = table.find_all("tr")

for row in rows:

cols = row.find_all("td")

for col in cols:

print(col.text, end="\t")

print()

  以上代码解析了一个简单的HTML表格,并输出了其中的数据。

  五、处理动态加载

  对于一些动态加载的表格,需要使用浏览器模拟用户操作来加载数据。可以使用cefpython3提供的ExecuteJavascript方法执行JavaScript脚本,并获取返回值。

  

  以下是一个示例代码,用于加载百度搜索结果页面中的所有搜索结果:

   python

import cefpython3 as cef

#创建窗口对象

window_info = cef.WindowInfo()

window_info.SetAsOffscreen(0)

browser = cef.CreateBrowserSync(window_info=window_info, url="https://www.baidu.com/s?wd=cefpython3", window_title="")

#进入消息循环

cef.MessageLoop()

#获取所有搜索结果标题

script ="""

var results = document.querySelectorAll(".result .t");

var titles =[];

for (var i =0; i < results.length;i++){

titles.push(results[i].innerText);

}

titles;

"""

titles = browser.ExecuteJavascript(script)

for title in titles:

print(title)

  以上代码通过执行JavaScript脚本,获取了百度搜索结果页面中的所有搜索结果,并输出了它们的标题。

  六、保存数据

  获取到表格数据后,可以将其保存到本地文件或数据库中。对于小规模数据,可以使用Python内置的文件操作和SQLite数据库;对于*敏*感*词*数据,可以考虑使用分布式数据库或云存储等技术。

  以下是一个示例代码,用于将表格数据保存到SQLite数据库中:

   python

import sqlite3

#连接数据库

conn = sqlite3.connect("data.db")

cursor = conn.cursor()

#创建表格

cursor.execute("""

CREATE TABLE IF NOT EXISTS students (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT NOT NULL,

age INTEGER NOT NULL,

gender TEXT NOT NULL

)

""")

#插入数据

data =[

("张三", 18,"男"),

("李四", 22,"女")

]

cursor.executemany("INSERT INTO students (name, age, gender) VALUES (?,?,?)", data)

#查询数据

cursor.execute("SELECT * FROM students")

rows = cursor.fetchall()

for row in rows:

print(row)

#关闭连接

conn.commit()

conn.close()

  以上代码创建了一个名为students的表格,并向其中插入了两条数据,最后查询了表格中的所有数据。

  七、优采云

  优采云是一家专注于数据采集和处理的云计算服务提供商,致力于为企业提供高效、安全、稳定的数据采集和处理服务。优采云的服务涵盖了数据采集、数据清洗、数据存储、数据分析等方面,可以帮助企业快速实现数字化转型。

  八、SEO优化

  在进行自媒体营销时,需要注意SEO优化,以提高文章的曝光率和阅读量。以下是一些常用的SEO优化技巧:

  1.标题要简洁明了,并包含关键词;

  2.内容要具有独特性和价值,并包含关键词;

  3.图片要添加alt属性,并包含关键词;

  4.文章要合理设置H1、H2等标题标签,并包含关键词;

  5.文章要适当添加外部链接和内部链接。

  结语

  本文介绍了如何利用cef浏览器抓取网站表格内容,并在此基础上打造高效采集利器。同时,我们也介绍了一些与数据采集相关的技术和服务,希望能够对您有所帮助。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线