爬虫入门(使用selenium)—— 附实操案例微博爬虫使用手册

爬虫入门(使用selenium)
—— 附实操案例微博爬虫

 

厦门大学 WISERCLUB

2024.11

Selenium介绍

1. 什么是Selenium

  • Selenium最初是一个自动化测试工具,Selenium可以驱动浏览器自动执行自定义好的逻辑代码,即通过代码完全模拟使用浏览器自动访问目标站点并操作,所以也可以用来爬虫。就好比有一个人坐在电脑前快速浏览网页读取数据。

  • 相比于其他爬虫工具的优势:

    • 可以模拟用户操作,避免一般的反爬虫方法

    • 可以执行JavaScript,得到动态网页中的数据

2. 如何安装Selenium

  • 打开cmd或Anacoda Prompt,输入:

    pip install selenium

  • 安装后尝试能否导入Selenium(能够运行即为安装成功)
from selenium import webdriver
  • 除了安装selenium本身,还需要安装对应的浏览器驱动,可以使用webdriver-manager库自动查看浏览器版本并下载对应的驱动程序。打开cmd或Anacoda Prompt,输入:

    pip install webdriver-manager

  • 使用webdriver_manager中的ChromeDriverManager安装ChromeDriver(按下面代码的步骤操作即可)

#导入selenium和webdriver_manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 使用 ChromeDriverManager 安装 ChromeDriver,并返回驱动程序的路径
driver_path = ChromeDriverManager().install()

# 打印驱动程序的路径(验证是否成功下载对应驱动)
print(driver_path)

# 创建 ChromeDriver 服务,并指定驱动程序的路径
service = Service(driver_path)

#可以将Chrome替换为Edge、Firefox或Safari,下载其他浏览器的驱动
  • 尝试能否使用驱动程序和selenium库打开网页
# 创建 Chrome WebDriver,并指定服务
browser = webdriver.Chrome(service=service)
# 打开百度网页
browser.get("https://www.baidu.com")
  • 如果自动安装不成功,可以尝试手动安装(版本尽量一模一样,否则可能出错,可以在浏览器的设置中查看自己的浏览器版本)

    • Google浏览器驱动:https://sites.google.com/a/chromium.org/chromedriver/downloads

    • Edge浏览器:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

    • 火狐Firefox浏览器:https://github.com/mozilla/geckodriver/releases

    • Safari 浏览器:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

  • 如果是手动安装,记得要把下载好的驱动放到python安装路径的scripts目录中,如果是用的Anacoda装的python,放在Anacoda文件夹中即可。

3. Selenium基本操作

访问浏览器页面
  • 可以使用get方法请求网页,向其参数传入要请求网页的URL即可

  • page_source 指令可以打印当前页面的html源代码

# 创建 Chrome WebDriver,并指定服务
browser = webdriver.Chrome(service=service)

#获取淘宝的网页
browser.get('https://www.taobao.com')

#page_source指令打印该网页的html源代码
print(driver.page_source)
  • 运行结果如下:
<html lang="zh-CN" class="ks-webkit537 ks-webkit ks-chrome122 ks-chrome"><head><script charset="utf-8" src="https://g.alicdn.com/tbhome/??taobao-2021/0.0.37/common/head/item-bar.jst.html-min.js,taobao-2021/0.0.37/common/head/item.jst.html-min.js" async=""></script><script charset="utf-8" src="https://g.alicdn.com/tbhome/??taobao-2021/0.0.37/common/head/index-min.js,taobao-2021/0.0.37/c/shop/item.jst.html-min.js,taobao-2021/0.0.37/c/live/item.jst.html-min.js,taobao-2021/0.0.37/c/hotsale/item.jst.html-min.js,taobao-2021/0.0.37/c/hotsale/config-min.js,taobao-2021/0.0.37/c/helper/item.jst.html-min.js,taobao-2021/0.0.37/c/goods/item.jst.html-min.js,taobao-2021/0.0.37/c/qiang/item.jst.html-min.js,taobao-2021/0.0.37/common/pipe/index-min.js,taobao-2021/0.0.37/c/fashion/item.jst.html-min.js" async=""></script><script charset="utf-8" src="https://g.alicdn.com/tbhome/??taobao-2021/0.0.37/common/inject-min.js,taobao-2021/0.0.37/c/shop/index-min.js,taobao-2021/0.0.37/c/sale/index-min.js,taobao-2021/0.0.37/c/live/index-min.js,taobao-2021/0.0.37/c/hotsale/index-min.js,taobao-2021/0.0.37/c/helper/index-min.js,taobao-2021/0.0.37/c/goods/index-min.js,taobao-2021/0.0.37/c/qiang/index-min.js,taobao-2021/0.0.37/c/fashion/index-min.js" async=""></script><script charset="utf-8" src="https://g.alicdn.com/tbhome/??taobao-2021/0.0.37/lib/lazy-min.js" async=""></script><script src="https://textlink.simba.taobao.com/?name=tbhs&amp;cna&amp;nn=&amp;count=13&amp;pid=430266_1006&amp;_ksTS=1711245240035_70&amp;callback=jsonp71" async=""></script>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=10,chrome=1">
  <meta name="renderer" content="webkit">
  <title>淘宝</title>
  <meta name="spm-id" content="a21bo">
  <meta name="description" content="淘宝网 - 亚洲较大的网上交易平台,提供各类服饰、美容、家居、数码、话费/点卡充值… 数亿优质商品,同时提供担保交易(先收货后付款)等安全交易保障服务,并由商家提供退货承诺、破损补寄等消费者保障服务,让你安心享受网上购物乐趣!">
  <meta name="aplus-xplug" content="NONE">
  <meta name="keyword" content="淘宝,掏宝,网上购物,C2C,在线交易,交易市场,网上交易,交易市场,网上买,网上卖,购物网站,团购,网上贸易,安全购物,电子商务,放心买,供应,买卖信息,网店,一口价,拍卖,网上开店,网络购物,打折,免费开店,网购,频道,店铺">
  <meta name="msvalidate.01" content="6E0390D0C5FFD883392E1B1E070FE901">
  <link rel="dns-prefetch" href="//g.alicdn.com">

  .........(还有很多内容省略掉了)
定位元素
  • Selenium使用 browser.find_element(By.属性 , ‘属性名称’) 的语法来定位元素,或者是 browser.find_element(“属性”, ‘属性名称’)

  • 这里要注意,网上很多教程给出的是老版本的语法(4.0版本之前).find_element_by_id,目前新版本已经不可用

  • 下面给出最基本的五种定位方法

#从淘宝界面提取搜索框的节点

# ID 定位: 使用元素的 ID 属性来定位元素。
input_by_id = browser.find_element("id", 'q')
print(input_by_id)
#等价于 browser.find_element(By.ID, 'q')

# Name 定位: 使用元素的 Name 属性来定位元素。
input_by_name = browser.find_element("name", 'q')
print(input_by_name)
#等价于 browser.find_element(By.NAME, 'q')

# Class Name 定位: 使用元素的 Class 属性来定位元素。
input_by_class = browser.find_element("class name", 'search-suggest-combobox')
print(input_by_class)
#等价于 browser.find_element(By.CLASS_NAME, 'search-suggest-combobox')

# CSS 选择器定位:使用CSS selector定位,可以理解为另一套查找规则,具体规则可以查看 https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Selectors
input_by_cssselector = browser.find_element("css selector", '#q') #此处#q等价于用id查找
print(input_by_cssselector)
#等价于 browser.find_element(By.CSS_SELECTOR, '#q')

# XPath 定位: 使用 XPath 表达式来定位元素。语法请见上期课件,或 https://www.runoob.com/xpath/xpath-syntax.html
input_by_xpath = browser.find_element("xpath", '//*[@id="q"]')
print(input_by_xpath)
#等价于 browser.find_element(By.XPATH, '//*[@id="q"]')
  • 运行结果如下:
<selenium.webdriver.remote.webelement.WebElement (session="b25faf1e4a6d084c61ce42c98dba5ed7", element="f.83DA36E53487B5F97380791F6C6FE601.d.1A59F384579EFD019ABCC99EDFC6956C.e.18")>
<selenium.webdriver.remote.webelement.WebElement (session="b25faf1e4a6d084c61ce42c98dba5ed7", element="f.83DA36E53487B5F97380791F6C6FE601.d.1A59F384579EFD019ABCC99EDFC6956C.e.18")>
<selenium.webdriver.remote.webelement.WebElement (session="b25faf1e4a6d084c61ce42c98dba5ed7", element="f.83DA36E53487B5F97380791F6C6FE601.d.1A59F384579EFD019ABCC99EDF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值