自动化爬虫DrissionPage

自动化爬虫DrissionPage

目录

1.使用自动化爬虫DrissionPage

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

3.实战

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

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

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

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

一、使用自动化爬虫DrissionPage

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

cmd 复制代码
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 time

from 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').text
        sheet.append([name, price])
        print(name, price)

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

完整代码:

python 复制代码
import time

from 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').text
        sheet.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)
        # 没有分页了
        break

wb.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 openpyxl

page = 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 = 1

for 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').text
    except Exception:
        store_name = "无名氏"
    ws.append([title, price, store_name])
    print(count, "标题:", title, "\t价格:", price, "\t商店名称:", store_name)
    count += 1
wb.save("商品信息.xlsx")

结果:


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

以上就是自动化爬虫DrissionPage的所有内容了, 如果有哪里不懂的地方,可以把问题打在评论区, 欢迎大家在评论区交流!!!

如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.

学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.

人生路漫漫, 白鹭常相伴!!!

相关推荐
好看资源平台6 分钟前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
进击的六角龙27 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂28 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc35 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
孤独且没人爱的纸鹤38 分钟前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~42 分钟前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
lzhlizihang44 分钟前
python如何使用spark操作hive
hive·python·spark
q0_0p1 小时前
牛客小白月赛105 (Python题解) A~E
python·牛客
极客代码1 小时前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
庞传奇1 小时前
TensorFlow 的基本概念和使用场景
人工智能·python·tensorflow