上篇文章介绍了requests库获取数据的基本方法,本篇文章利用自动化测试工具selenium进行数据抓取,也会对代码部分进行详细解释,以便小伙伴们能够更加理解和上手。
Selenium是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。下面就进入正式的 study 阶段。
为了更好的上手selenium,这里选择从百度开始进行搜索
首先进入百度,然后抓取输入框,进行输入csdn进行搜索
再者需要注意的是窗口的切换问题,当网页切换时,web仍然在初始页,因此1需要调用相应方法调转窗口
web.switch_to_window(web.window_handles[-1])
此语句为调转到最后一个窗口,相应的selenium方法在前面相关文章已经提高,大家可以参考下面文章
https://blog.csdn.net/qqshenbaobao/article/details/118156004?spm=1001.2014.3001.5501
利用抓包工具,复制所要抓取元素xpath路径进行数据获取
xpath路径获取方式:
以第一个div为例,这里粘贴出第一个div的元素层次分级,并进行所需元素精准定位。
注意:若获取批量数据进行列表迭代,不能利用xpath进行复制粘贴,因为不同的div定位不同,故应该在该div对象中进行相对定位获取所需要元素.
定位作者名称:
nickName=div.find_element_by_xpath("./div/div/dl/dd/a").text
定位粉丝数量:
fscount=div.find_element_by_xpath("./div/div/dl/dt/span[1]").text
定位获赞数量:
hzcount=div.find_element_by_xpath("./div/div/dl/dt/span[2]").text
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
web=webdriver.Chrome()
web.get("https://www.baidu.com/")
web.find_element_by_xpath("//*[@id='kw']").send_keys("csdn",Keys.ENTER)
time.sleep(2)
web.find_element_by_xpath('//*[@id="1"]/div/div[1]/h3/a[1]').click()
web.switch_to_window(web.window_handles[-1])
print(web.title)
time.sleep(2)
web.find_element_by_xpath('//*[@id="floor-www-index_558"]/div/div[4]/div/div[1]/div/ul/li[5]/a').click()
time.sleep(1)
web.switch_to_window(web.window_handles[-1])
web.find_element_by_xpath('//*[@id="floor-rank_460"]/div[2]/div[1]/div/div[1]/ul/li[8]/div[2]').click()
time.sleep(1)
div_list=web.find_elements_by_xpath('//*[@id="floor-rank_460"]/div[2]/div[2]/div/div[2]/div')
for div in div_list:
nickName=div.find_element_by_xpath("./div/div/dl/dd/a").text
fscount=div.find_element_by_xpath("./div/div/dl/dt/span[1]").text
hzcount=div.find_element_by_xpath("./div/div/dl/dt/span[2]").text
print("作者名:",nickName,"粉丝数:",fscount,"获赞数:",hzcount)
码字不易,希望大家可以动动小手点个赞,后续会出更多高质量的文章供大家参考学习,一起加油吧!