IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 写爬虫,到底是选scrapy还是selenium呢 -> 正文阅读

[Python知识库]写爬虫,到底是选scrapy还是selenium呢

作者:token keyword

一、背景故事

那会儿,作者正在...冥想,微信突然弹出前领导的消息,顿时心里有点小激动,以为是要拉兄弟一把,升职加薪!!!

结果一看,嗯,原来是个活儿,发来一个视频,类似爬虫的桌面应用,从某音爬取数据,并找到对应评论的某人私信!

可以是说是批量给视频评论的人私信推销产品,如果他们找过来,然后完成交易,达成转化!问我实现的成本有多大?

二、说干就干

  • 第一点,对于爬虫这类事情,作者是即开心又紧张,心理总有些小兴奋<牢饭怎么样?>。
骗人的!!!

其实脑海里面立即给出多个解决方案:使用什么技术呢?怎样才能更出色的做好呢?
  • 方案<即将安出>

2.1、python熟知的scrapy爬虫框架,使用起来真的很棒、很不错!!!

但是作者是个测试工程师,不是爬虫工程师,爬虫只是偶尔的兴趣爱好!!!

重点是作者仅仅粗略自学过一段scrapy框架,现在要用起来还得从零开始。

2.2、那么通过F12浏览器调试工具,可以使用接口来爬取数据吗?结果大失所望!!!

因为直接requests.get(url)请求会提示错误,并没有数据返回。

仔细一看发现请求参数中有个加密参数,所以每次浏览器请求都会不一样,如果不知道规则,也就无法通过这种方式爬数据。

2.3、既然作者是枚测试人员,那么UI自动化测试中的selenium工具,是不是可以用呢?

是的,办法总比困难多。再不济,连接口请求都能拿来做爬虫呢。

三、使用selenium来爬取某音的视频数据

  • 前提条件:使用者必须有python基础及xpath语法且有自动化思想
# 准备python+selenium环境;下载对应chrome浏览器的版本驱动;先准备一个demo测试一下,是否能正常使用!

from selenium import webdriver

driver=webdriver.Chrome(executable_path="../chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()

driver.get("http://www.baidu.com")

# do somethings

driver.quit()
  • 如果是目标明确,直接在浏览器中打开官网,搜索关键字得到url<如下代码演示>
'''
Created on 2021年7月22日

@author: qguan
'''

import re
from time import sleep

from selenium import webdriver

# 初始化驱动对象 
driver=webdriver.Chrome(executable_path="../chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()

# 打开目标网址 
url="https://www.xxxxyin.com/search/%E4%B8%8A%E6%B5%B7%E6%95%B4%E5%9E%8B"
driver.get(url)
# 可能是反扒的原因,有拼图验证
sleep(5) # 这里手动,用于测试
# 可以使用图像处理,处理滑块验证 
# 最后当然是使用无头模式

# 获取当前句柄,后面页面切换使用
# handler=driver.current_window_handle

# 获取当前结果页的所有元素集
video_pic=driver.find_elements_by_xpath("//div[@style='display: block;']/ul/li/div/a[1]")

# 计数器
i=1
for video in video_pic:
    # 遍历点击元素
    video.click()
    # 获取浏览器所有句柄
    handlers=driver.window_handles
    # 切换最新的那一个
    driver.switch_to_window(handlers[-1])
    
    # 获取跳转页面元素:标题、点赞、评论、发布时间、用户名
    titles=driver.find_elements_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/h1/span[2]/span/span/span/span")
    if len(titles)>0:
        title=""
        for tit in titles:
            title+=tit.text
    else:
        title="没有获取到完整的title"
    
    praise=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[1]/span").text
    comment=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[2]/span").text
    open_time=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[2]/span").text
    
    # 视频作者名称
    username=driver.find_element_by_xpath("//div/div[2]/div[1]/div[2]/div/div[1]/div[2]/a/div/span/span/span/span/span")
    
    # 点击用户名跳转用户详情页
    username.click()
    
    # 获取当前页的url地址后,就关闭当前页面
    c_url=driver.current_url
    driver.close() # 为什么关闭不了
    
    param_url=c_url.split("?")[1] # 拆分url地址?拼接的参数
    # 正则匹配,提取用户视频id、用户id
    author_id=re.findall("(\d{11})",param_url)[0]
    group_id=re.findall(r"(\d{19})",param_url)[0]
    
    # 控制台输出结果
    print("第{}条,视频title:{},作品id:{},用户id:{},评论数:{},点赞数:{},发布时间:{}".format(i,title,group_id,author_id,comment,praise,open_time))
    
    # 切换第一页
    driver.switch_to_window(handlers[0])
    
    i+=1 # 计数器加1
     
# 退出driver驱动
driver.quit()
  • 将结果输出在控制台,爬取关键信息如下:

和领导发过来视频的操作的数据基本匹配
image.png

四、总结

  • 从工具易用(完整)性来讲爬虫,selenium工具不如scrapy框架,主要体现在scrapy方便数据库操作,功能更直接。
学习selenium工具成本更大:需要熟知元素定位方案,还需要解决更多ui层的问题;
连数据库建表都需要亲力亲为;可能还需要搭配其他框架来解决某些特定场景的问题。
  • 从功能实现上来说,只要能快速解决问题的工具就是好工具,专业的工具做专业的事情,欢迎读者更多交流。
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:03:18  更:2021-08-20 15:03:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:51:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码