Python爬虫:Selenium+BeautifulSoup解析动态HTML页面【附完整代码】

前言

        前短时间,为了验证公司的验证码功能存在安全漏洞,写了一个爬虫程序抓取官网图库,然后通过二值分析,破解验证码进入系统刷单。 其中,整个环节里关键的第一步就是拿到数据 -- Python 爬虫技。

        今天,我打算把爬虫经验分享一下,因为不能泄露公司核心信息,所以我随便找了一个第三方网站——《懂车帝》做演示。为了展示Selenium效果,网站需满足:需要动态加载(下拉)才能获取完整(或更多)数据的网页,如:淘宝,京东,拼多多的商品也都可以。

        通过本篇,你将学会通过Selenium自动化加载HTML的技巧,并利用 BeautifulSoup 解析静态的HTML页面,还有使用 xlwt 插件操作 Excel。

        本文仅教学使用,无任何攻击行为或意向。


正文

一、页面分析

1. 打开页面,提取关键信息

        首先,打开“某瓣电影一周新片榜”的页面:https://www.dongchedi.com/sales,截图省略了下面列表部分。

        然后,提取榜单里的关键信息,如:当前月份,汽车排名,图片链接,汽车名称,汽车品牌,评论数等,这是我们需要爬取的数据,接下来就需要弄清楚他们在 Html 中的位置。

2. 分析Html页面

        Chrome浏览器 - 【F12】检查下 Html 页面结构,找到排行榜数据的具体位置,这对我们后续利用 Selenium 和 BeautifulSoup 解析至关重要。

        下面图片里可以看到,月份信息在 “<div class="more_more__z2kQC"></div>” 标签里(篇幅原因,没有展示全),而当月的榜单信息在"<li class="list_item__3gOKl">"的标签里,10条 “<tr></tr> ”标签形成一个List集合。

        注意:当前页面第一次进来页面只会加载出10条记录,如果想要获取全量的排行榜数据,我们需要用到 Selenium 技术动态加载页面,直到数据全部加载出来为止。

以下是使用seleniumBeautifulSoup4库来爬取子网页标题和网址的示例代码: ```python from selenium import webdriver from bs4 import BeautifulSoup # 设置 Chrome 浏览器的位置 chrome_driver_path = "/path/to/chromedriver" # 创建一个浏览器实例 driver = webdriver.Chrome(chrome_driver_path) # 导航到目标网页 driver.get("https://www.example.com") # 使用 BeautifulSoup页面源代码解析HTML soup = BeautifulSoup(driver.page_source, "html.parser") # 获取页面上的所有链接 links = soup.find_all("a") # 遍历链接列表 for link in links: # 获取链接的 URL url = link.get("href") # 如果链接为空或者已经包含 "http",则跳过这个链接 if not url or "http" in url: continue # 在链接前面添加目标网站的域名,形成完整的 URL url = "https://www.example.com" + url # 导航到链接地址 driver.get(url) # 使用 BeautifulSoup 解析页面的源代码 sub_soup = BeautifulSoup(driver.page_source, "html.parser") # 获取子页面的标题 title = sub_soup.title.string # 输出子页面的标题和链接 print(title, url) # 关闭浏览器实例 driver.quit() ``` 此示例中,我们首先使用 `webdriver.Chrome` 方法创建了一个 Chrome 浏览器实例,然后导航到目标网页。接着,我们使用 BeautifulSoup4 解析页面源代码,并获取了页面上的所有链接。然后,我们遍历所有链接,并使用 `driver.get` 方法导航到每个链接所对应的网页。在每个子页面上,我们使用 BeautifulSoup4 获取页面的标题,并输出子页面的标题和链接。最后,我们使用 `driver.quit` 方法关闭了浏览器实例。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java Punk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值