使用Python和Selenium爬取QQ新闻热榜

在这篇博客文章中,我们将介绍如何使用Python和Selenium库来爬取QQ新闻热榜中的新闻标题和链接。Selenium是一个强大的工具,可以模拟浏览器行为,适用于动态网页的爬取。

说明

这篇文章旨在帮助初学者了解如何使用Python和Selenium库进行网页爬取。希望对你有所帮助!

依赖库

  • Python 3.x
  • Selenium
  • ChromeDriver

准备工作

首先,我们需要安装必要的库。你可以使用以下命令来安装Selenium和ChromeDriver管理器:

pip install selenium webdriver-manager

代码解析:

导入库

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

这里我们导入了 selenium 库中的 webdriverOptions 和 By 模块,用于控制浏览器、设置浏览器选项和定位网页元素。

设置Chrome选项

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

我们创建了一个 Options 对象,并添加了一些选项来配置Chrome浏览器:

  • --headless:无头模式,在后台运行浏览器,不会弹出浏览器窗口。
  • --disable-gpu:禁用GPU加速。
  • --no-sandbox:禁用沙盒模式。
  • --disable-dev-shm-usage:禁用/dev/shm的使用,防止共享内存不足的问题。

初始化WebDriver

driver = webdriver.Chrome(options=chrome_options)

我们使用配置好的选项初始化了一个Chrome浏览器的WebDriver实例。

打开网页

url = 'https://news.qq.com/'
driver.get(url)

使用 driver.get(url) 方法打开QQ新闻热榜页面。

查找符合格式的新闻链接

news_links = driver.find_elements(By.CSS_SELECTOR, 'a.normal-title, a.one-icon-title, a.two-icon-title')

使用 driver.find_elements 方法查找所有符合CSS选择器 'a.normal-title, a.one-icon-title, a.two-icon-title' 的新闻链接。

打印前10条新闻标题和链接

for index, news in enumerate(news_links[:10], start=1):
    title = news.text
    link = news.get_attribute('href')
    print(f"第{index}条: 标题: {title}, 链接: {link}")

遍历前10条新闻,获取它们的标题和链接,并打印出来。

关闭WebDriver

driver.quit()

编写爬虫脚本

接下来,我们将编写一个Python脚本来爬取QQ新闻热榜中的新闻标题和链接。以下是完整的代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# 初始化WebDriver
driver = webdriver.Chrome(options=chrome_options)

# QQ新闻热榜URL
url = 'https://news.qq.com/'

# 打开网页
driver.get(url)

# 查找符合格式的新闻链接
news_links = driver.find_elements(By.CSS_SELECTOR, 'a.normal-title, a.one-icon-title, a.two-icon-title')

# 打印前10条新闻标题和链接
for index, news in enumerate(news_links[:10], start=1):
    title = news.text
    link = news.get_attribute('href')
    print(f"第{index}条: 标题: {title}, 链接: {link}")

# 关闭WebDriver
driver.quit()

代码解析

  1. 设置Chrome选项:我们使用无头模式(--headless)来运行浏览器,这样可以在后台执行,不会弹出浏览器窗口。
  2. 初始化WebDriver:我们使用ChromeDriver来控制Chrome浏览器。
  3. 打开网页:使用driver.get(url)方法打开QQ新闻热榜页面。
  4. 查找新闻链接:使用driver.find_elements(By.CSS_SELECTOR, 'a.normal-title, a.one-icon-title, a.two-icon-title')方法查找所有符合格式的新闻链接。
  5. 打印新闻标题和链接:遍历前10条新闻,打印它们的标题和链接。
  6. 关闭WebDriver:使用driver.quit()方法关闭浏览器。

网页界面:

运行结果:

运行上述代码后,你将看到前10条QQ新闻热榜中的新闻标题和链接输出在控制台中。

结论

通过这篇文章,我们学习了如何使用Python和Selenium库来爬取QQ新闻热榜中的新闻标题和链接。Selenium是一个非常强大的工具,适用于处理动态网页的爬取任务。如果你有任何问题或建议,欢迎在评论区留言!

扩展

处理动态加载内容

有些网页内容是通过JavaScript动态加载的,可能需要等待一段时间才能获取到。你可以使用Selenium的WebDriverWaitexpected_conditions模块来处理这种情况:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待页面加载完成
wait = WebDriverWait(driver, 10)
news_section = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.normal-title, a.one-icon-title, a.two-icon-title')))

处理分页

如果你需要爬取多个页面的数据,可以使用Selenium模拟点击“下一页”按钮:

while True:
    try:
        next_button = driver.find_element(By.CSS_SELECTOR, 'a.next-page')
        next_button.click()
        # 等待页面加载完成
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.normal-title, a.one-icon-title, a.two-icon-title')))
        # 继续爬取数据
    except:
        break

保存数据到文件

你可以将爬取到的数据保存到CSV文件中,方便后续处理和分析:

import csv

with open('news_data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['标题', '链接'])
    for news in news_links[:10]:
        title = news.text
        link = news.get_attribute('href')
        writer.writerow([title, link])

使用代理

如果你需要爬取大量数据,可能会遇到IP被封禁的问题。你可以使用代理来避免这种情况:

from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = 'http://your_proxy:port'
proxy.ssl_proxy = 'http://your_proxy:port'

capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)

driver = webdriver.Chrome(desired_capabilities=capabilities, options=chrome_options)

 

处理验证码

有些网站会使用验证码来防止自动化爬取。你可以使用第三方服务来处理验证码,或者手动输入验证码:

# 手动输入验证码
captcha_input = driver.find_element(By.CSS_SELECTOR, 'input.captcha')
captcha_input.send_keys(input('请输入验证码: '))

 

其他文章推荐

相关类型推荐

  1. 使用Python和BeautifulSoup进行网页爬取

    • 介绍如何使用BeautifulSoup库来解析静态网页,并提取所需的数据。
  2. 使用Python和Scrapy进行网页爬取

    • 介绍如何使用Scrapy框架来构建高效的爬虫,并处理大规模的数据爬取任务。
  3. 使用Python和Requests库进行网页爬取

    • 介绍如何使用Requests库来发送HTTP请求,并获取网页内容。
  4. 使用Python和Selenium进行自动化测试

    • 介绍如何使用Selenium库来编写自动化测试脚本,模拟用户操作并验证网页功能。
  5. 使用Python和Pandas进行数据处理

    • 介绍如何使用Pandas库来处理和分析从网页爬取到的数据。

总结

通过这篇文章,我们学习了如何使用Python和Selenium库来爬取QQ新闻热榜中的新闻标题和链接。Selenium是一个非常强大的工具,适用于处理动态网页的爬取任务。如果你有任何问题或建议,欢迎在评论区留言!

希望这些推荐对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时告诉我。😊

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LIY若依

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

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

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

打赏作者

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

抵扣说明:

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

余额充值