Python采集腾讯新闻实例

  • Post category:Python

Python采集腾讯新闻实例是一项非常常见的网络爬虫任务,采集到的数据能够作为数据分析和挖掘的基础。本文将介绍如何使用Python爬取腾讯新闻,并提供两个实例。

步骤一:分析目标网站

在开始爬取任务之前,我们需要先了解目标网站的页面结构和数据获取方式。我们要采集的网站是腾讯新闻,网址为 https://news.qq.com/。通过使用浏览器开发者工具可以很容易地查看到网站页面的结构,包括HTML代码和CSS样式。

步骤二:选择爬虫工具

Python是一种非常流行的网络爬虫语言,我们可以使用Python自带的urllib、requests库,或者更高级的Scrapy框架。在这里,我们选择使用Python的requests库。

步骤三:编写爬虫代码

使用Python的requests库,我们可以很容易地发送HTTP请求,并获取网页的HTML代码。以下是代码示例:

import requests

url = 'https://news.qq.com/'
response = requests.get(url)
html = response.text

上面的代码我们首先导入了requests库,然后指定了要访问的URL地址,并发送HTTP请求。我们可以通过response.text属性获取到网页的HTML代码。此时,我们已经成功地获取到了腾讯新闻的网页HTML代码。

步骤四:解析网页数据

通过步骤三获取到的HTML代码,我们还需要使用Python的一些库来解析网页中的数据。以下是一些常见的用于解析HTML代码的库:

  • BeautifulSoup
  • lxml
  • html5lib

在这里,我们使用比较流行的BeautifulSoup库来解析目标网页数据。以下是代码示例:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
news_list = soup.find('div', {"class": "main"}).find_all('div', {"class": "newslist"})

for nl in news_list:
    title = nl.find('a').text
    href = nl.find('a')['href']
    print(title, href)

上面的代码中,我们首先调用了BeautifulSoup库并使用HTML解析器对获取到的HTML代码进行解析。接下来,我们通过find()和find_all()方法找到页面中的新闻列表数据,并遍历列表中的每一个新闻节点。我们通过find()方法获取每个新闻节点的标题和链接。

示例一:爬取新闻列表

以下是一个完整的实例,用于爬取腾讯新闻的新闻列表数据,并将数据存储到CSV文件中:

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://news.qq.com/'
response = requests.get(url)
html = response.text

soup = BeautifulSoup(html, 'html.parser')
news_list = soup.find('div', {"class": "main"}).find_all('div', {"class": "newslist"})

with open('news.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '链接'])
    for nl in news_list:
        title = nl.find('a').text
        href = nl.find('a')['href']
        writer.writerow([title, href])

示例二:爬取新闻正文

以下是一个完整的实例,用于爬取腾讯新闻的新闻正文和时间数据,并将数据存储到CSV文件中:

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://new.qq.com/omn/20211121/20211121A09MVV00.html'
response = requests.get(url)
html = response.text

soup = BeautifulSoup(html, 'html.parser')
title = soup.find('h1', {"class": "hd"}).text
time = soup.find('span', {"class": "time"}).text
content = soup.find('div', {"class": "content-article"}).text.strip()

with open('news_detail.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '时间', '内容'])
    writer.writerow([title, time, content])

上面的代码中,我们首先指定了需爬取的新闻页URL地址,并发送HTTP请求。接下里,我们使用BeautifulSoup库解析HTML代码,并通过find()方法找到新闻页面的标题、时间和正文数据。最后,我们将数据存储到CSV文件中。