自动化爬虫DrissionPage

server/2024/12/2 10:32:13/

自动化爬虫DrissionPage

目录

1.使用自动化爬虫DrissionPage

2.操作浏览器并爬取数据保存到本地

3.实战

我们在讲之前, 说说DrissionPage和Selenium这两个自动化爬虫之间的对比。

Selenium自动话爬虫需要下载对应版本的浏览器的驱动并将驱动放置到项目文件夹里面去, 需要用代码Service(r’chromedriver.exe’)来指定驱动的路径, 而DrissionPage自动化爬虫不需要这些操作。

DrissionPage相对比Selenium的语法稍微简单些。

我还是更推荐大家之后去使用DrissionPage。但不代表Selenium没有存在的意义, 很多网站的自动化爬虫的方法, 也都在用Selenium。

一、使用自动化爬虫DrissionPage

我们在使用自动化DrissionPage爬虫之前, 需要安装第三方库。

pip install drissionpage

安装好以后均可使用。

导包:

python">from DrissionPage._configs.chromium_options import ChromiumOptions
from DrissionPage._pages.chromium_page import ChromiumPage

我们创建一个浏览器对象, 并打开网页

python">page = ChromiumPage()
page.get('https://www.mi.com/shop/category/list')

结果:

在这里插入图片描述

我们成功的打开了网页。

DrissionPage的基本操作

获取网页的源代码:

python">print(page.html)

解析数据, 获取标签对象:

python">浏览器对象.ele() #拿一个标签
浏览器对象.eles() #拿多个标签

根据标签名获取标签对象(tag:标签名):

python">print(page.ele('tag:div'))

返回结果:如果根据表达式能够成功获取到某一个标签,则返回标签对象,反之则获取None。

python">print(page.eles('tag:div'))

返回结果:如果根据表达式能够成功获取到标签,则返回列表,列表中装标签对象,反之则获取空列表。

同理, 还有id, class, name等属性, xpath之类的操作。

通过id属性获取标签对象 id=‘app’ #app:

python">print(page.ele('#app'))

通过class属性获取标签对象 class=“breadcrumbs” .breadcrumbs:

python">print(page.ele('.breadcrumbs'))

通过name属性获取标签对象 @属性名=属性值:

python">print(page.ele('@name=description'))

@属性名=属性值, 这里面的属性名, 可以是其它在标签里面的任意属性。

比如:

python">print(page.ele('@id=app'))

通过xpath筛选 配合前缀:xpath:或者x:

python">print(page.ele('xpath://div[@id="app"]'))

或者:

python">print(page.ele('x://div[@id="app"]'))

获取文本内容 标签对象.text:

python">print(page.ele('tag:title').text)

获取属性值 标签对象.attr(属性名):

python">print(page.ele('@name=description').attr('content'))

二、操作浏览器并爬取数据保存到本地

我们还是以那个当当网为例子:

在这里插入图片描述

url是https://www.mi.com/shop/category/list

我们先用DrissionPage打开网页:

python">import timefrom DrissionPage._pages.chromium_page import ChromiumPage
# alt+enter
page = ChromiumPage()
# 打开网页
page.get('https://www.mi.com/shop/category/list')

然后我们在网页的右上边那里的输入框输入文字并且点击搜索按钮进行搜索内容:

python"># 往搜索框中输入手机
page.ele('#search').input('手机')
# 点击放大镜
page.ele('x://input[@type="submit"]').click()

获取商品数据:

python">divs = page.eles('.goods-item')

获取商品和价格:

python">    for div in divs:# 商品名字name = div.ele('tag:h2').text# 价格price = div.ele('tag:span').textsheet.append([name, price])print(name, price)

在这些基础上, 我们还需要加上分页查询并且要保存到excel表格里面这两个需求。

完整代码:

python">import timefrom DrissionPage._pages.chromium_page import ChromiumPage
# alt+enter
page = ChromiumPage()
# 打开网页
page.get('https://www.mi.com/shop/category/list')# 点击某个标签
# 标签对象.click()
# page.ele('@alt=Xiaomi MIX系列').click()
# 往文本框输入内容
# 往搜索框中输入耳机
page.ele('#search').input('手机')
# 点击放大镜
page.ele('x://input[@type="submit"]').click()
count=1
# 获取商品数据
# 每个商品都在goods-item的标签中
'''
1-没有获取到全部的数据:网页数据还没有加载,代码执行过快
2-轮动条没有到网页的最后,导致数据未加载'''
# 写入数据到excel文件中
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '小米商城数据'
sheet.append(['名称','价格'])
while True:time.sleep(2)# 滚动滚动条 一页数据比较多的情况下page.run_js('window.scrollBy(0,document.documentElement.scrollHeight)')divs = page.eles('.goods-item')for div in divs:# 商品名字name = div.ele('tag:h2').text# 价格price = div.ele('tag:span').textsheet.append([name, price])print(count,name, price)count+=1# 实现点击分页  如果不能继续点击,则出异常,标签对象获取不到try:page.ele('x://a[@class="numbers last"]',timeout=3).click()except Exception as e:print(e)# 没有分页了breakwb.save('小米商城数据.xlsx')

结果:

在这里插入图片描述

excel表格里面成功保存着数据。

控制台:

实战:

利用DrissionPage自动化爬虫, 打开当当网, 随便搜索内容, 搜索之后的界面, 获取每个商品里面的信息(如标题, 价格, 商店名称之类的信息)。

url是:https://www.dangdang.com/。

先不要马上看答案, 自己尝试的做一做哦!!!在这里插入图片描述






参考答案:

python">from DrissionPage._configs.chromium_options import ChromiumOptions
from DrissionPage._pages.chromium_page import ChromiumPage
import openpyxlpage = ChromiumPage()
page.get("https://www.dangdang.com/")
page.set.window.max()
page.ele("#key_S").input("智能魔方")
page.ele(".button").click()
grocery_list = page.eles('x://ul[@class="bigimg cloth_shoplist"]//li')
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "商品信息"
ws.append(["标题", "价格", "商店名称"])
count = 1for item in grocery_list:# 商品标题title = item.ele('x:.//p[@class="name"]//a').attr("title")# 价格price = item.ele('x:.//p[@class="price"]//span').text# 店名try:store_name = item.ele('x:.//p[@class="link"]//a').textexcept Exception:store_name = "无名氏"ws.append([title, price, store_name])print(count, "标题:", title, "\t价格:", price, "\t商店名称:", store_name)count += 1
wb.save("商品信息.xlsx")

结果:

在这里插入图片描述
在这里插入图片描述

这道实战题, 你写出来了吗? 如果写出来的话, 给自己鼓掌哦👏

以上就是自动化爬虫DrissionPage的所有内容了, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!


http://www.ppmy.cn/server/140605.html

相关文章

HiveSQL面试题

一、各类型专利top 10申请人,以及对应的专利申请数 1)表名:t_patent_detail (专利明细表) 2)表字段:专利号(patent_id)、专利名称(patent_name)、专利类型(patent_type)、申请时间 (aplly_da…

element-plus按需引入报错AutoImport is not a function

官网文档:快速开始 | Element Plus webpack配置 // webpack.config.js const AutoImport require(unplugin-auto-import/webpack) const Components require(unplugin-vue-components/webpack) const { ElementPlusResolver } require(unplugin-vue-components…

电工领域文档规范引用格式说明

》》国内电工领域的论文引用格式是怎样的? 在国内电工领域的学术论文中,通常采用的引用格式是《中国学术期刊(光盘版)检索与评价数据规范》(简称《规范》)或《文后参考文献著录规则》(GB/T 771…

linux系统重要目录!!!

文章目录 Linux重要目录1.Linux目录考古2.Linux重要目录详解 第2章 /etc下重要文件及目录1.网卡配置文件2.DNS解析配置文件3.本地DNS解析文件4.主机名配置文件5.设备开机自动挂载配置文件6.开机自启动配置文件7.系统环境变量配置文件8.软件启动脚本目录9.用户登陆系统后显示内容…

Mybatis Plus 集成 PgSQL 指南

“哲学家们只是用不同的方式解释世界,而问题在于改变世界。” ——卡尔马克思 (Karl Marx) 解读:马克思强调了实践的重要性,主张哲学不仅要理解世界,更要致力于改造世界。 本文我们引入 Mybatis Plus 作为 ORM ,并且使…

TikTok Spark Ads火花广告是什么?如何设置?

TikTok的广告类型多样、功能各异,如果你需要投放精准度更高、效果更持久、更能吸引用户点击和参与的广告,那么Spark Ads会是一个相当不错的选择。 一、什么是TikTok Spark Ads 1.概念 Spark Ads是直接使用真实的自然流量视频及其功能来进行宣传的一种原…

【缓存与加速技术实践】Web缓存代理与CDN内容分发网络

文章目录 Web缓存代理Nginx配置缓存代理详细说明 CDN内容分发网络CDN的作用CDN的工作原理CDN内容的获取方式解决缓存集中过期的问题 Web缓存代理 作用: 缓存之前访问过的静态网页资源,以便在再次访问时能够直接从缓存代理服务器获取,减少源…

leetcode hot100【LeetCode 22.括号生成】java实现

LeetCode 22.括号生成 题目描述 给定一个整数 n,生成所有由 n 对括号组成的有效括号组合。 有效括号组合需满足如下条件: 左括号的数量必须等于右括号的数量。在任何前缀中,左括号的数量不能小于右括号的数量。 示例: 输入&a…