买了空间和域名 怎么做网站,wordpress ajax登录页面,网页制作交城旅游景点,土木工程公司排名上一篇文章#xff0c;我们使用Selenium完成了网页内文件的自动下载,本文我们将使用Selenium来爬取东方财富网股吧内笔记的评论数据。
网页内容分析 网页内容的分析是web自动化中的关键一步。通过分析网页结构#xff0c;我们可以确定需要抓取的数据位置以及操作元素的方式。… 上一篇文章我们使用Selenium完成了网页内文件的自动下载,本文我们将使用Selenium来爬取东方财富网股吧内笔记的评论数据。
网页内容分析 网页内容的分析是web自动化中的关键一步。通过分析网页结构我们可以确定需要抓取的数据位置以及操作元素的方式。 与爬虫不同的是,web自动化通常是对浏览器渲染后的html网页直接进行操作因此我们不需要像爬虫那样进行抓包分析,只需要在原网页中定位元素并进行相应的操作即可。 登录弹窗关闭 这里我们在东方财富网的网页端随机进入一支股票的股吧Edge浏览器ctrlshiftiChrome浏览器F12一键打开开发者工具后,进行分析。 首先,进入后,引入眼帘的便是广告弹窗,对于这种弹窗我们直接使用XPATH定位到右上角的XX,然后点击关闭即可。
单页评论定位 每一页的评论,都被放在了一个table内,并且tabel内 trclasslistitem/tr 每一个名为listitem的行,即是该页内每条评论存放的位置。
那么在代码中,我们只需要这样写变可以将改页内所有评论爬取下来
trswebdriver.find_elements(By.CLASS_NAME,listitem)
comments[tr.text for tr in trs]
多页评论定位 当我们切换页面的时候,观察网页url,发现 第1页内评论 第2页内评论 在切换页数时,url唯一变换的是查询参数而查询参数实际上就是由 股票代码_页数构成当然第一页除外,所以,当我们想要爬取一支股票多页的评论时,便可以简单的在一个页数循环内让webdriver打开新的一个网页,接着重复之前的工作即可。 源代码
import time
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
class 东方财富网():def __init__(self,StockCode:str,pages:int1,headless:boolFalse):Args:pages:爬取评论页数。headless:是否开启无头模式。StockCode:股票代码。self.StockCodeStockCodeself.pagespagesself.headlessheadlessself.urls[fhttps://guba.eastmoney.com/list,{self.StockCode}.html]self.comments{page:[] for page in range(1,self.pages1)}#构建一个字典格式为{页数i:[第i页的评论列表]}def comments_scraper(self):#根据股票代码和页数构建所有待爬取的urlfor page in range(2,self.pages1):self.urls.append(fhttps://guba.eastmoney.com/list,{self.StockCode}_{page}.html)#配置webdriver的optionsself.OptionsOptions()self.Options.add_argument(--disable-blink-featuresAutomationControlled)#隐藏自动化控制self.Options.add_argument(--ignore-ssl-errosr)#忽略ssl错误self.Options.add_argument(--ignore-certificate-errors)#忽略证书错误self.Options.add_experimental_option(excludeSwitches, [enable-logging])#隐藏自动化控制self.Options.add_experimental_option(excludeSwitches,[enable-automation])#隐藏自动化控制if self.headless:#无头模式运行自动化代码self.Options.add_argument(--headless)self.Options.add_argument(--disable-gpu)self.browserwebdriver.ChromiumEdge(self.Options)for i in range(self.pages):self.browser.get(self.urls[i])self.browser.maximize_window()#webdriver全屏self.browser.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, {#执行一段js代码隐藏自动化控制source: Object.defineProperty(navigator, webdriver, {get: () undefined})})time.sleep(2)#登录弹窗只在第一页弹出,我们在第一页弹出点击关闭后就不痛再点击了,因此第二页之后是不存在关闭弹窗的按钮的#因此这里使用try来捕获第二页及以后的NosuchelementException先尝试点击关闭按钮,如果存在点击,不存在引发异常直接pass什么也不用管#接着怕我们的数据就行try:closeself.browser.find_element(By.XPATH,/html/body/div[5]/img[1])close.click()except NoSuchElementException:passcommentsself.browser.find_elements(By.CLASS_NAME,listitem)comments[comment.text for comment in comments]self.comments[i1]commentsprint(f共计爬取{self.pages}页评论,第{i1}页评论已爬取完毕)self.browser.quit()with open(f{self.StockCode}股评爬取.txt,w,encodingutf-8) as f:for i in range(1,self.pages1):f.write(f第{i}页股评\n{self.comments[i]}\n\n)
东方财富网(headlessFalse,pages5,StockCode600600).comments_scraper()爬取结果 总结
本文介绍了Selenium爬取页面内容的实例,通过上述实例我们不难总结出一个Selenium爬虫的基本思路
1.开发者工具定位爬取内容在源代码中区域。
2.使用合适的合适的selenium定位方式定位爬取内容。
3.选择合适的等待机制与异常处理机制(可能非必须)。
4.根据爬取内容的特性,选择适当的处理方式:对于文字内容,我们通常使用text属性获取其文字内容。
总重要的是,所有的操作必须要考虑到各种情况,并且合乎逻辑!