**
网站分析
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
**
本文实现的爬虫是抓取京东商城指定苹果手机的评论信息。使用 requests 抓取手机评论 API 信息,然后通过 json 模块的相应 API 将返回的 JSON 格式的字符串转换为 JSON 对象,并提取其中感兴趣的信息。读者可以点击此处打开 京东商城,如下图所示:
在这里插入图片描述
在这里插入图片描述
URL 是 苹果手机商品 。商品页面如下图所示:
在这里插入图片描述
在这里插入图片描述
在页面的下方是导航条,读者可以单击导航条上的数字按钮,切换到不同的页面,会发现浏览器地址栏的 URL 并没改变,这种情况一般都是通过另外的通道获取的数据,然后将数据动态显示在页面上。那么如何来寻找这个通道的 URL 呢?
在 Chrome 浏览器的开发者工具的 Network 选项中单击 XHR 按钮,再切换到其他页,并没有发现要找的 API URL,可能京东商城获取数据的方式有些特殊,不是通过 XMLHttpRequest 发送的请求。
在这里插入图片描述
所以重新选中 All 按钮,显示所有的 URL。现在用另外一种方式寻找这个 URL,就是 Filter。通过左上角的 Filter 输入框,可以通过关键字搜索 URL,由于本文是抓取评论数据,所以可以尝试输入 comments,在左下角的列表中会出现如下图所示的内容。
在这里插入图片描述
在搜索结果中会看到 1个名为 productPageComments.action 的 URL ,单机这个 URL,在右侧切换到 Preview 选项卡,会看到如上图所示的内容,很明显,这是 JSON 格式的数据,展开 comments ,会看到有 10 项 ,这是返回的 10 条评论。在展开某一条评论,如下图所示:
在这里插入图片描述
从属性的内容可以看出,content 属性是评论内容,creationTime 是评论时间,days 是购买多长时间后才来评论的。通过 Headers 选项卡可以得到如下完整的 URL 。
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100005492549&score=0&sortType=5&page=0&pageSize=10&isShadowSku=100008348530&fold=1
1
从这个 URL 可以看出,page 参数表示页数,从 0 开始,pageSize 参数表示每页获取的评论数,默认是 10,这个参数可以保留默认值,只改变 page 参数即可。
- 示例代码
根据前面的描述实现抓取苹果手机评论信息的爬虫,通过 fetch_comment_count 变量可以控制抓取的评论条数。最后将抓取的结果显示在控制台中。示例代码如下:
-- coding: UTF-8 --
“”"
@author:AmoXiang
@file:4.抓取京东苹果手机评论.py
@time:2020/09/15
“”"
import requests
import json
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36’
}
fetch_comment_count = 1000 # 限定抓取的评论数
index = 0 # 用于记录爬取到第几条评论
page_index = 0 # 页码
flag = True # 用于控制循环是否退出
while flag:
url = ‘https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100005492549&score=0&sortType=6&page={}&pageSize=10&isShadowSku=100008348530&rid=0&fold=1’.format(
page_index)
page_index += 1
res = requests.get(url=url, headers=headers)
text = res.text
# 下面的代码替换返回数据的部分内容,因为返回的数据并不是标准的 JSON 格式
json_str = text.replace(‘fetchJSON_comment98(’, ‘’)[:-2]
json_obj = json.loads(json_str) # 将字符串转换为字典对象
comments_list = json_obj[‘comments’]
comments_list_length = len(comments_list)
# 循环输出评论数据
for i in range(comments_list_length):
comments = comments_list[i][‘content’]
print(f’< {index + 1} > {comments}’)
creation_time = comments_list[i][‘creationTime’] # 获取评论时间
nickname = comments_list[i][‘nickname’] # 获取昵称
print(creation_time)
print(nickname)
print("-" * 20)
index += 1
if index == fetch_comment_count:
flag = False
break
List item
程序运行结果如下图所示:
在这里插入图片描述
- 注意事项
京东商城如果频繁使用同一个 IP 发起大量请求,服务端会临时性封锁 IP,可以使用一些免费的代理。
API URL 返回的数据并不是标准的 JSON,里面还有一些杂质,需要在本地将其删除。 本例有一个前缀是 fetchJSON_comment98 ,这个前缀是通过 URL 的 callback 参数指定的,根据参数名应该是个回调函数,具体是什么不需要管,总之,需要按照 callback 参数的值将返回数据的前缀去掉。