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文件中。