【数据采集】Python爬虫「序」

Python网络爬虫简介



爬取方式

Xpath


Selenium库

  • Selenium是一个用于Web应用程序测试的工具。
  • Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
  • 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
  • 这个工具的主要功能包括:
    • 测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。
    • 测试系统功能——创建回归测试检验软件功能和用户需求。
    • 支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

Selenium库 使用方法

  • Selenium库安装:pip install Selenium
  • 浏览器驱动:Selenium打开浏览器需要安装对应的浏览器驱动,不同版本的浏览器驱动版本也不一样,谷歌浏览器使用谷歌驱动,下载驱动时,驱动版本要跟浏览器本身的版本一样或者接近
  • Selenium基本操作(旧):selenium的11种基础操作(元素的定位、操作,浏览器的打开、管理、处理、代理、加载,键盘操作)
  • Selenium基本操作(2024.1):
    • 定位操作
      • 定位一个元素:driver.find_element(By.ID, "cheese")(可以在上一步结果的基础上进一步缩小范围)
      • 定位多个元素:mucho_cheese = driver.find_elements_by_css_selector("#cheese li")
      • 八个内置的元素选择方法(class name、css selector、id、name、link text、partial link text、tag name、xpath)
      • 其他定位法:定位到相邻元素(above()、below()、toLeftOf()、tpRightOf()、near() )
    • 动作操作
      • 定位并输入文本:driver.find_element(By.NAME, "name").send_keys(name)
      • 拖放功能:ActionChains(driver).drag_and_drop(source, target).perform()
      • 点击元素:driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()
    • 实例化WebDriver:driver = Chrome()
    • 浏览器操作:
      • 打开网页:driver.get("https://selenium.dev")
      • 获取当前网址:driver.current_url
      • 按下浏览器的后退按钮:driver.back()
      • 按下浏览器的前进按钮:driver.forward()
      • 刷新网页:driver.refresh()
      • 读取当前页面标题:driver.title
      • 当打开一个新窗口时,获取该窗口的处理权:driver.current_window_handle
      • 当点击一个链接跳转到新窗口时,需要switch到新窗口
      • 创建新窗口并switch
      • 关闭一个窗口或tab
      • Frames和Iframes,点击iframes中的按钮
      • 退出浏览器:driver.quit()
    • 窗口管理
    • 等待响应
    • JavaScript警报、提示、确认
    • Http代理
    • 网页加载策略
    • Web元素
    • 键盘操作

Chrome Driver

ChromeDriver是配合Selenium库使用的,因为只有安装ChromDriver,才能驱动Chrome浏览器完成响应的操作。

  • 谷歌浏览器驱动下载:
    • Windows版下载地址:https://chromedriver.storage.googleapis.com/index.html
    • Mac版下载地址:https://googlechromelabs.github.io/chrome-for-testing/
  • Windows版下载的ChromeDriver.exe直接丢到python环境Scripts目录中,也可以将chromedriver.exe复制到你的项目中,然后使用相对路径在程序中引用
  • Mac版将下载好的可执行文件移动到/usr/local/bin目录中, 并添加信任授权
# 拷贝
cp chromedriver-mac-arm64/chromedriver /usr/local/bin# 授权
cd /usr/local/bin
xattr -d com.apple.quarantine chromedriver
  • 测试代码
from selenium import webdriver
driver=webdriver.Chrome() #启动谷歌浏览器
driver.get("http://www.zhihu.com") #访问一个网页
driver.quit() #退出浏览器

Selenium爬虫程序

  • selenium模拟用户请求豆瓣电影
from selenium import webdriverurl = "https://movie.douban.com/top250"# Todo: 获取浏览器对象
browser = webdriver.Chrome()
browser.maximize_window()
browser.get(url)
# print(browser.page_source)# Todo:搜索(输入+点击+重新输入)
# 查找并输入搜索查询
search_input = browser.find_element("css selector", "#inp-query")
search_input.send_keys("周星驰")# 点击搜索按钮
search_button = browser.find_element("css selector", "#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn")
search_button.click()# 在页面更改后重新查找搜索输入框
search_input = browser.find_element("css selector", "#inp-query")# todo: 清除搜索输入框
search_input.clear()# # 方法一:双击
# ActionChains(browser).double_click(search_input).perform()# # 方法二:全选
# search_input.send_keys(Keys.CONTROL, "a")
# search_input.send_keys(Keys.DELETE)# 方法三:js
# browser.execute_script("arguments[0].value = '';", search_input)# 输入新的搜索查询
search_input.send_keys("刘德华")# 再次点击搜索按钮
search_button = browser.find_element("css selector", "#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn")
search_button.click()# 关闭浏览器窗口
browser.quit()
  • Selenium模拟用户京东搜索爬取数据存储在 csv文件中
from selenium import webdriver
import csv
import timeurl="https://www.jd.com/"
# 1.获取浏览器对象
browser=webdriver.Chrome()
# 2.窗口 最大化
browser.maximize_window()
# 3.请求url
browser.get(url)
# 4.获取文本框并赋值
browser.find_element("css selector","#key").send_keys("男士衣服")
# 5.找到搜索按钮
browser.find_element("css selector","#search > div > div.form > button").click()
# 6.查找所有的li
#J_goodsList > ul > li
#J_goodsList > ul > li:nth-child(2)
#J_goodsList > ul > li:nth-child(3)
# 原因:数据加载时异步加载,所以要等待数据加载完之后再获取
# 单位秒,秒的具体取值跟网速有关系,
time.sleep(2)
li_List=browser.find_element("css selector","#J_goodsList > ul > li")
# 7.循环
i=1
for li in li_List:# 8.获取价格# selenium提取标签 文本的方法:标签.textprice=li.find_element_by_css_selector("div > div.p-price > strong > i").text# 9.获取标题title=li.find_element_by_css_selector("div > div.p-name.p-name-type-2 > a > em") .text# 10.获取店铺# selenium提取标签属性的方法:标签.get_attribute("属性名")store=li.find_element_by_css_selector("div > div.p-shop > span > a").get_attribute("title")# 11.将内容写入到csv文件中with open("男士衣服.cvs","a",encoding="utf-8",newline="") as file:csv.writer(file).writerow([price,title,store])print("第{}条下载成功".format(i))i+=1

Selenium处理验证码

  • 使用ddddocr库识别验证码
import ddddocr
ocr = ddddocr.DdddOcr()
pngData = browser.find_element(By.CLASS_NAME,"SecurityCode_codeImg__390LE").screenshot_as_pngres = ocr.classification(pngData)
print(res)yzm_input = browser.find_element(By.CLASS_NAME,"SecurityCode_inputBox__mD9hI")
yzm_input.send_keys(res)yzm_button = browser.find_element(By.CSS_SELECTOR,"#indexLayout > div.IndexLayout_bodyContainer__mAURt > div > div:nth-child(6) > div > div.adm-mask-content > div > div.SecurityCode_footBox__5_k_V > div.SecurityCode_btnItem__uroav.SecurityCode_mainBtn__Kja7V")
yzm_button.click()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为何Selenium这么火?

今天给大家带来的主题是自动化测试框架Selenium,话不多说,直接开始! 1.什么是 Selenium 自动化测试 Jason Huggins 于 2004 年创建了一个 JavaScript 框架,旨在将其从重复的手动测试中解放出来。 最初命名为 JavaScriptTestRunn…

【数据结构—二叉树的链式结构实现】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、二叉树的存储结构 二、二叉树链式结构的实现 2.1手动构建一课树 2.2二叉树的遍历 三、二叉树链式结构的实现 3.1前序遍历(递归) 3.2中序遍历(递归) 3.3后序…

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…

第三方软件测试机构可提供哪些服务类型?如何收费?

随着高新技术的快速发展,软件企业将测试工作交由第三方软件测试机构进行已经成为了行业趋势,因为企业自身的大多精力都投入在产品开发上,第三方软件测试机构的存在也就极大的提供了便利。 第三方软件测试机构是区别于软件企业与软件需求方的…

fetch 流式请求

async function getStream() {try {let response await fetch(/chat/stream/你好?); // /chat/stream/后面跟问题if (!response.ok) {throw new Error(Network response was not ok);}const reader response.body.getReader();const textDecoder new TextDecode…

Spark内核解析-节点启动4(六)

1、Master节点启动 Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作 1.1脚本概览 下面是一个举例: /opt/jdk1.7.0_79/bin/java -cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/ha…

MatrixOne 完成与飞腾处理器的兼容互认

近日,矩阵起源超融合数据库 MatrixOne 企业版软件V1.0(简称 MatrixOne 企业版,下同)与飞腾两款处理器完成兼容性适配,此次适配测试覆盖两款处理器,分别是 FT-2000/64 和飞腾腾云S2500。测试显示 MatrixOne …

科研+临床观摩|牙科医生公派美国从事访问学者交流

很多临床医学专业的访问学者希望在访学从事科研的同时,能到医院进行临床观摩。对于这些申请者的要求,我们会尽量满足。本案例中的T医生,口语较弱,担心英语面试,最终我们为其取得了田纳西大学健康科学中心的邀请函&…

记模型训练损失为NAN

前段时间想把我模型的输入由DWT子带改为分块的图像块,一顿魔改后,模型跑着跑着损失就朝着奇怪的方向跑去了:要么突然增大,要么变为NAN。 为什么训练损失会突然变为NAN呢?这个作者将模型训练过程中loss为NAN或INF的原因…

数据模型中的“概念模型”、“逻辑模型”、“物理模型”区别

数据模型是数字化应用设计过程中非常重要的技术要素,通过数据模型可以提高企业各方沟通效率,实现数字化项目落地的规范性和架构统一性。 数据模型分为三个层级,抽象程度上由高到低依次是概念数据模型(Concept Data Model&#xf…

Java实战项目一:简易命令行计算器开发

文章目录 一、实战概述二、知识点概览(一)变量和数据类型(二)控制台输入输出(三)条件判断与逻辑结构(四)算术运算符(五)方法定义与调用 三、思路分析&#xf…

SoapUI参数传递操作详解

SoapUI 传递参数 本文章主要是通过例子,给大家讲解一下 SoapUI 发送请求时,如何带上参数~ 我们可以先了解下:SoapUI简介:了解这个流行的API测试工具 新建工程 首先新建一个工程,然后在里面进行后续的操作。 填写工程…

冥想第一千零二十七天

1.周三,早上送溪溪上学,带着溪溪的药给老师说了说。今天没有带饭,因为妈妈起来的晚了。 2.项目上全力以赴的一天,晚上健身房和朋友一起运动,朋友指导了器材。 3.晚上抢纪念币没有抢到。 4.感谢父母,感谢朋友…

java基础之-servlet

文章介绍了servlet,它的生命周期,又介绍了servlet的一个简单demo 一、是什么 servlet是一个运行在web服务器上的, 能接受和响应客户端http请求的,java程序 二、怎么用 一个简单的demo 1、在WEB-INF/web.xml创建一个servlet &…

java常见面试题:什么是流(Stream)?Java中的流有哪些操作?

流(Stream)是Java 8中引入的一个新特性,它提供了一种声明性方式来处理数据集合。流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。 在Java中…

okhttp网络请求工具

先依赖 implementation com.squareup.okhttp3:logging-interceptor:3.5.0 implementation com.google.code.gson:gson:2.8.0 import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; import an…

WPF 应用程序中实现单例模式

要在 WPF 应用程序中实现单例模式,确保应用程序在任意时刻只有一个实例运行,您可以在 App.xaml.cs 的 OnStartup 方法中检查是否已有应用程序实例在运行。如果是,那么可以阻止新实例的启动,并将焦点转移到现有实例,或者…

SSD PCIe接口综述

SSD 的接口当前以PCIe为主,因为其速度远快于SATA接口。 PCIe 特征 已经从PCIe1.0发展到了6.0, 其中3.0的双向带宽:单通道(Lane)为2GB/s, 32通道为64GB/s全双工模式,发送和接收通道可以同时工作(SATA为半双…

python3基础知识-学习目录

本次学习的内容是以python3.X为平台,详细的阐述python编程的基础知识和高级技巧。虽然之前学习过相关的知识,但是并未真正掌握python的原理,此次的学习更是为了加深自己的印象,并更深入的理解python的高阶知识。 为了学习效率更好…

【python入门】day12:bug及其处理思路

bug的常见类型 粗心 / 没有好习惯 思路不清 lst[{rating:[9.7,2062397],id:1292052,type:[犯罪,剧情],title:肖申克的救赎,actors:[蒂姆罗宾斯,摩根弗里曼]},{rating:[9.6,1528760],id:1291546,type:[剧情,爱情,同性],title:霸王别姬,actors:[张国荣 ,张丰毅 , 巩俐 ,葛优]},{r…