Python爬取人民日报文章,并根据关键词筛选下载
以下是一个使用Python编写的爬取人民日报文章的代码示例,该程序可以根据指定的日期范围和关键词,爬取人民日报的文章,并将包含关键词的文章下载到指定的路径中,并统计爬取的文章数量和正确性比率。
import requests
from bs4 import BeautifulSoup
import datetime
# 获取指定日期的人民日报文章链接
def get_article_links(date):
base_url = 'http://paper.people.com.cn/rmrb/html/{}/nbs.D110000renmrb_01.htm'.format(date)
response = requests.get(base_url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
links = []
for a in soup.find_all('a'):
href = a.get('href')
if href and href.startswith('./'):
links.append('http://paper.people.com.cn/rmrb/html/{}/{}'.format(date, href[2:]))
return links
# 下载指定链接的文章
def download_article(link, keyword, save_path):
response = requests.get(link)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('div', class_='title').get_text()
content = soup.find('div', class_='text_c').get_text()
if keyword in content:
with open('{}/{}.txt'.format(save_path, title), 'w', encoding='utf-8') as f:
f.write(content)
return True
return False
if __name__ == '__main__':
start_date = input('请输入开始日期(格式:YYYYMMDD):')
end_date = input('请输入结束日期(格式:YYYYMMDD):')
keyword = input('请输入关键词:')
save_path = input('请输入保存路径:')
start = datetime.datetime.strptime(start_date, '%Y%m%d')
end = datetime.datetime.strptime(end_date, '%Y%m%d')
delta = end - start
total_articles = 0
correct_articles = 0
for i in range(delta.days + 1):
date = (start + datetime.timedelta(days=i)).strftime('%Y%m%d')
links = get_article_links(date)
for link in links:
total_articles += 1
if download_article(link, keyword, save_path):
correct_articles += 1
print('爬取的文章数量:', total_articles)
print('爬取文章的正确性比率:{:.2f}%'.format(correct_articles / total_articles * 100))
该代码使用Python的requests库和Beautiful Soup库,实现了爬取人民日报文章的功能。程序首先会获取指定日期范围内的所有文章链接,然后根据输入的关键词筛选相关文章,并将其下载到指定的路径中。最后,程序会统计爬取的文章数量和正确性比率。
使用说明:
- 将代码保存为.py文件。
- 运行.py文件。
- 按照提示输入开始日期、结束日期、关键词和保存路径。
- 程序会自动爬取指定日期范围内的人民日报文章,并将包含关键词的文章下载到指定路径中。
- 程序会在窗口中显示爬取的文章数量和爬取文章的正确性比率。
注意:
- 该代码仅供学习和研究使用,请勿用于商业目的。
- 爬取网站数据时,请遵守网站的robots协议,避免对网站造成负面影响。
- 使用该代码可能会受到反爬虫机制的限制,需要根据实际情况进行调整。
其他优化建议:
- 可以使用多线程或多进程来加速爬取速度。
- 可以将爬取的数据存储到数据库中,方便后续分析和处理。
- 可以使用代理服务器来绕过反爬虫机制。
- 可以使用selenium等工具来处理动态加载的页面。
- 可以使用scrapy等框架来简化爬虫开发流程。
希望这个示例能帮助您更好地理解使用Python进行网页爬取。
关于该代码的更多优化建议:
- 为了防止IP被封,可以考虑使用代理服务器来访问网站,并在程序中加入一些随机延时操作,避免频繁地访问网站。
- 可以使用多线程或多进程技术来加速爬取速度,但需要注意的是,使用多线程或多进程时,要控制并发请求的数量,避免对网站造成过大的压力。
- 可以使用缓存技术来避免重复下载相同的内容,提高程序效率。
- 可以使用数据库来存储爬取的数据,方便后续分析和处理。
- 可以使用日志记录功能,记录程序运行过程中的重要信息,方便调试和排查问题。
- 可以使用异常处理机制,避免程序因为一些异常情况而崩溃。
- 可以使用代码规范,使代码更易于阅读和维护。
总结:
使用Python进行网页爬取是一项很实用的技能,它可以帮助我们获取到许多有价值的数据。但需要注意的是,要遵守网站的robots协议,并尽量避免对网站造成负面影响。
原文地址: https://www.cveoy.top/t/topic/qpt1 著作权归作者所有。请勿转载和采集!