简单爬取新浪新闻数据
数据 简单 新闻 爬取 新浪
2023-06-13 09:12:08 时间
# -*- coding: utf-8 -*-
"""
@author: sato
@file: sina_spider.py
@time: 2019-09-03 15:57
"""
import requests
import re
import multiprocessing
import os
class Spider(object):
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/76.0.3809.132 Safari/537.36'
}
# 新浪新闻首页 每日要闻、重点新闻 id="wrap" > class="part_01 clearfix" > class="p_middle"
self.base_url = 'https://news.sina.com.cn/'
def get_news_list(self):
res = requests.get(self.base_url, self.headers)
if res.status_code not in (200, 201):
raise Exception('network error!')
res.encoding = 'utf-8'
part_01_clearfix = re.findall('<div class="part_01 clearfix">([\S\s]*?)<div class="part_01 clearfix" data-sudaclick="blk_livevideo">', res.text)
if part_01_clearfix:
part_01_clearfix = part_01_clearfix[0]
p_middle = re.findall('<div class="p_middle">([\S\s]*?)<div class="p_right">', part_01_clearfix)
if p_middle:
return re.findall('<a target="_blank" href="([\S\s]*?)"', p_middle[0])
def rep_and_write(self, link):
print(f'get data from {link}')
ret = requests.get(url=link, headers=self.headers)
if ret.status_code not in (200, 201):
raise Exception(f'get {link} error!')
ret.encoding = 'utf-8'
content = ret.text
title = re.findall('<title>([\S\s]*?)</title>', content)[0]
with open(os.path.join('./html', title + '.html'), 'w') as f:
f.write(content)
def run(self):
links = self.get_news_list()
if not links:
raise Exception('error!')
if not os.path.exists('./html'):
os.mkdir('./html')
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
for link in links:
pool.apply_async(self.rep_and_write, (link,))
pool.close()
pool.join()
print('done')
spider = Spider()
spider.run()
相关文章
- 使用python的Django库开发一个简单的数据可视化网站(一)- 基本环境安装及配置
- 使用 JPA 访问数据
- i3s 一种开源的三维地理数据规范 简单解读
- 使用分类权重解决数据不平衡的问题
- 亚马逊销售的 Android 电视盒,正在悄悄窃取你的数据
- 快速简单:使用Redis写入数据(redis写入数据)
- MySQL数据:让编号变得简单(mysql数据编号)
- Mysql季度数据查询简单做(mysql季度查询)
- 快速导入:从SQL Server到Excel的简单数据转移(sqlserver导入数据)
- MySQL中存储二进制数据的简单方法(mysql二进制数据)
- MDB数据导入MySQL的简单教程(mdb导入mysql)
- 数据库性能,优化数据操作技巧(oracle提高)
- MySQL数据导入Hive:一个简单而又高效的方案(mysql导入到hive)
- 实现高效Redis数据迁移方案(如何redis数据迁移)
- 利用Oracle数据库查询指定时间段内的数据(oracle中时间段查询)
- Oracle 两列数据倒序排序技巧(oracle 两列倒序)
- v数据简单快速使用Redis获取KV数据(redis获取k)
- python采用requests库模拟登录和抓取数据的简单示例