本脚本运行环境:pycharm
一、部署说明
1.文档说明
以上三个脚本分别对应阿里云、腾讯云、华为云云厂商的文章数据抓取
本文档只是基于python,提供一种快速抓取云厂商数的途径,非统一抓取数据标准,相比于手动抓取数据,效率更高,质量更高,文章抓取只需“运行”。但脚本如果出现问题维护起点较高 需要具备并掌握python基础知识。
本文档在不断完善中。
2.环境准备
python3
pycharm安装python3
linux安装python3
不会环境安装可直接搜素关键词
二、脚本说明
1.脚本所用到的模块(库)
1.JSON模块
json是一种轻量级的数据交换格式,易于人阅读和编写。
参考链接:Python JSON | 菜鸟教程 (runoob.com)
2.request模块
Requests 请求库,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
参考链接:python中requests库使用方法详解 - 知乎 (zhihu.com)
3.beautifulsoup4解析库
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据。
参考链接:Python中BeautifulSoup库的用法_阎松的博客-CSDN博客_beautifulsoup库的作用
Python BS4解析库用法详解 (biancheng.net)
4.Pandas DataFrame
Pandas 主要包括以下几个特点:
它提供了一个简单、高效、带有默认标签(也可以自定义标签)的 DataFrame 对象。
能够快速得从不同格式的文件中加载数据(比如 Excel、CSV 、SQL文件),然后将其转换为可处理的对象;
能够按数据的行、列标签进行分组,并对分组后的对象执行聚合和转换操作;
能够很方便地实现数据归一化操作和缺失值处理;
能够很方便地对 DataFrame 的数据列进行增加、修改或者删除的操作;
能够处理不同格式的数据集,比如矩阵数据、异构数据表、时间序列等;
提供了多种处理数据集的方式,比如构建子集、切片、过滤、分组以及重新排序等。
DataFrame是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。在创建该结构时,可以指定相应的索引值。
参考链接:Pandas DataFrame入门教程(图解版) (biancheng.net)
pandas下载安装:Pandas库下载和安装 (biancheng.net)
三、脚本排错参考
一定要把上述模块(库)安装到环境里 否则会报错
1.例如没装pandas的报错:
Traceback (most recent call last):
File “E:\apps\pycharm\item\test Tencentcloud.py”, line 5, in
from pandas import DataFrame
ModuleNotFoundError: No module named ‘pandas’
解决办法:pycharm Ctrl+Alt+s
再点击这个“+”如图:
搜索pandas 并点击“install Package”
如果安装失败 请按照官方文档操作步骤进行安装。
2.代理报错
HTTPSConnectionPool(host=‘developer.aliyun.com’, port=443): Max retries exceeded with url: /indexFeed/?pageNum=1 (Caused by ProxyError(‘Cannot connect to proxy.’, NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x00000291A043E1F0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’))
解决办法:把代理关了
代码
import requests
from bs4 import BeautifulSoup
from pandas import DataFrame
class Aliyun:
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/90.0.4430.72 Safari/537.36 '
}
self.filename = './article/aliyuncloud.xlsx'
self.columns = ['厂商', '标题', '简介', '正文', 'url', '时间', '发布者']
def get_request(self, url):
return requests.get(url, headers=self.headers).text
def post_request(self, url):
return requests.post(url, headers=self.headers).text
def post_request_with_payload(self, url, payload):
return requests.post(url, json=payload, headers=self.headers).text
def write_to_excel(self, data):
df = DataFrame(data=data, columns=self.columns)
df.to_excel(self.filename)
def start(self):
data = []
for i in range(1, 11):
index_feed = self.get_request('https://developer.aliyun.com/indexFeed/?pageNum={}'.format(i))
index_feed = BeautifulSoup(index_feed, "lxml")
for item in index_feed.find_all('li', class_="feed-item feed-article"):
url = 'https://developer.aliyun.com/article/' + item.get('data-id')
title = item.find_next('p', class_="feed-article-title")
title = title.text if title is not None else ''
time = item.find_next('span', class_="feed-article-label feed-article-time")
time = time if time is not None else ''
article = self.get_request(url)
article = BeautifulSoup(article, 'lxml')
author = article.find('a', class_='author-right-name')
author = author.text if author is not None else ''
content = str(article.find('div', class_="article-hide-content"))
content = content if content != "None" else ''
summary = article.find('div', class_="article-desc")
summary = summary.text if summary is not None else ''
summary = summary.replace('\n', '')
data.append(['阿里云', title, summary, content, url, time, author])
self.write_to_excel(data)
if __name__ == '__main__':
aliyun = Aliyun()
aliyun.start()