具体的实施步骤是:明确爬取目标网站——明确爬取关键词——单页新闻标题获取——批量新闻标题获取——把新闻标题存到list中统计数量。
本文以北京的千龙网为例进行说明,希望代码能帮到更多有需要的小伙伴。
导入库
定义爬取的目标网站和关键词
获取单页新闻标题并点击下一页
批量获取所有标题
首先导入需要用到的库,具体如下:
import time
import random
from captcha import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
应用selenium进行数据爬取时,最头疼的是很多时候都会提示Chrome版本不匹配报错,需要重新下载对应版本。 本文应用代码直接安装Chrome,可以避免上述情况。 接着登录北京的千龙网,输入关键词进行查询,具体代码如下:
browser = webdriver.Chrome(ChromeDriverManager().install())
#安装chrome
browser.maximize_window()
#最大化窗口
login_url = 'https://www.chinaso.com/'
#网址
browser.get(login_url)
#登录网址
input_name = browser.find_element_by_xpath('//*[@id="q"]')
input_name.send_keys('气候变化')
browser.find_element_by_xpath('//*[@id="flpage"]/div/input').click()
#输入关键词并查询
三、获取单页新闻标题并点击下一页 接着点击浏览器中右上角红框中的三个点——点击更多工具——点击开发者工具来到开发者界面,具体如下:
如果想快捷进入该界面,可直接键盘按Ctrl+Shift+I即可。 接着想办法获取该界面的所有标题。 点击下图右上角红框中的箭头,把鼠标移动到左边红框中的标题上并点击,即可获取填到代码中的信息。 本来想通过Xpath的方式获取所有标题,但找规律时发现每个标题的Xpath路径存在混乱的情况。
故通过copy element看看有没有其他方法获取标题,复制后得到的信息如下:
<a href="https://www.chinaso.com/link?url=UOLknXBiUMJw5yewhSYbC1Hc1arTtsWoWs2OR1iC2Rbf5iygxfGCQddd6S79O%2BzWnlUck9v5htyUtQc4szfUlA%3D%3D&pos=12&wd=%E6%B0%94%E5%80%99%E5%8F%98%E5%8C%96" target="_blank" rel="noreferrer noopener" class="common-title">刘世锦:应对<em>气候变化</em>、实现碳中和的长期目标不能动摇或后退</a>
可以发现,通过find elements by class name的方式可以实现,具体代码如下:
text_list = browser.find_elements_by_class_name("common-title")
for i in range(len(text_list)):
title_list.append(text_list[i].text)
#获取标题
print(text_list[i].text)
得到结果:
气候变化·百科资料
世界气象组织报告:2023年气候变化和极端天气重创亚洲
国际劳工组织:警惕气候变化危害劳动者健康
为应对气候变化提供有力科技支撑
南非议会上院通过《气候变化法案》
中国气候变化领导力名单发布 助力可持续经济发展
欧盟气候变化监测机构:今年3月全球气温创历史新高
看宁夏农业 伊拉克气候变化和农业可持续发展研修班来宁研修考察
新研究预测气候变化或将影响全球计时
联合国:气候变化危及全球超过70%的劳动者健康
中国新能源产品出口为应对气候变化作出积极贡献
中国新能源产品出口为应对全球气候变化作出积极贡献
(聚焦博鳌)聚焦气候变化,博鳌嘉宾呼吁加强国际合作
刘世锦:应对气候变化、实现碳中和的长期目标不能动摇或后退
去年全球多项气候变化指标创纪录 多国呼吁加快行动
新研究预测气候变化可能导致蜜蜂数量下降
这时获取到了单页的所有标题,要想获取全量标题,需跳转到所有页面进行信息获取。
从浏览器中可以发现,可以通过点击下一页的方式获取所有页面信息,具体代码如下:
time.sleep(5)
browser.implicitly_wait(5)
browser.find_element_by_class_name('btn-next').click()
#点击下一页
四、批量获取所有标题 最后写循环获取所有标题。 在上文中介绍了获取单页标题和点击下一页的代码,所以获取全量标题的关键是:控制循环在获取到所有页面信息时自动退出。 要想实现该功能,可在代码中应用try函数,如果点击下一页没有报错,说明循环还未结束,如果报错,即到了最后一页,用break函数退出循环即可。 具体代码如下: title_list = []
num = 1
while True:
text_list = browser.find_elements_by_class_name("common-title")
for i in range(len(text_list)):
title_list.append(text_list[i].text)
#获取标题
#print(text_list[i].text)
try:
time.sleep(5)
browser.implicitly_wait(5)
browser.find_element_by_class_name('btn-next').click()
#点击下一页
except:
print(num)
break
num += 1
print(title_list)
得到结果: 打印一下标题数量,代码如下: len(title_list)
得到结果: 273
由于每天都会更新新闻,故得到的标题会动态变化,具体和跑代码的时间有关。 至此,应用Python批量爬取网站上“气候变化”关键词新闻个数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。
【部分群限时免费进】分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供练习数据资料、招聘内推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如学习python。
【python爬虫】批量识别pdf中的英文,自动翻译成中文下
【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考
限时免费进群
19967879837
添加微信号、手机号