爬虫也许对于大家并不陌生,所谓爬虫,即:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息,简单来说就是按照一定的规则,自动地抓取万维网信息的程序或脚本,就比如爬取知乎,百度文库里面的付费内容,抢火车票等各种优惠券,以及爬取vip的音乐视频等。其实,熟悉Java的小伙伴可能会使用Jsoup爬取网页的内容并解析,但是在当今互联网时代,爬虫时数据分析的基础,爬取数据的目的是为了对数据进行数据分析,而Python提高了大量数据分析的API以及可视化API,极大地方便了用户的使用,并且入学门槛较低。不仅如此,Python在世界脚本语言排行榜中排名已经是TOP,也是多领域的首选语言,2022年6月TIOBE 编程社区指数排名如下图所示,官网如下所示TIOBE指数
在这里插入图片描述
下面让我们以一个经典的案例来入门Python爬虫吧!
案例:雯雯同学和小北同学,请调研一下京东商城销量排名靠前的鞋子哪些颜色和码数比较受欢迎,做一个表格稍作分析,完成后发到我邮箱,加油~
面对此案例,雯雯同学和小北同学面临着三大问题,即如何收集京东数据,如何保存京东数据至Excel中,如何基于保存的数据做数据分析
在这里插入图片描述
下面让我们走进今天的Python爬虫之路吧!

1.爬取京东数据

使用代码爬取数据之前,我们需要了解到,我们的数据在对应服务器的哪一个网页以及客户端是通过哪一个请求头获取的数据,因为要知道,客户端每一次的请求都只能获取原网页的一部分数据,而如果原网页中没有的数据是无法通过Python爬取获得的。
案例中的任务是调研一下京东商城销量排名靠前的鞋子哪些颜色和码数,所以,我们先右击京东官网京东,进入京东首页,在搜索栏中输入鞋子并回车,在显示的视图中按评论数排序即可,排序后的第一名就是京东商城销量最高的鞋子。因为在京东或淘宝有一个机制,就是用户如果买完商品7天内没有评价,京东会自动生成一个好评,所以我们按评论数排序,排名第一位的就是销量最高的鞋子。
在这里插入图片描述
然后点击销量最高的鞋子,进入其详情,但是在里面的页面中并未找到有关鞋子销售的数据,于是我们直接点击商品评价查看评论详情。于是便找到了我们所需数据所在的网页。在这里插入图片描述
现在找到了网页,但是我们又面临着一个问题,那就是如何找到该网页的数据对应的客户端的请求头呢?刚刚已经介绍过,我们用户在地址栏中的一次url请求对应着客户端向服务器的多次的请求,每一次的请求都只是请求当前页面的一部分数据,众多的请求及数据便构成了我们的页面,而且只有我们找到了最精确的请求头,这样我们用json解析的时候就可以极大的简化我们的分析工作。
解决步骤如下所示:
1.打开程序员调试窗口,即右击鼠标或按下键盘F12键;
2.在打开的程序员调试窗口,点击网络(Network)并刷新当前页面,刷新后可以看见一长串的请求,每一个都对应着网页中一部分数据。
在这里插入图片描述
3.任意复制原网页中的部分数据,点击搜索符号,如图所示,复制到第二步的搜索框中,搜索后就会出现对应的请求,点击请求可以查看具体杂乱无章的json数据。
在这里插入图片描述
最后点击标头即可查看对应的请求头的网址,具体如下图所示:
在这里插入图片描述
找到请求头后,我们便可以编写Python代码来爬取我们所需要的数据了,具体代码如下所示:

import requests
# 设置headers是为了解决服务器反爬机制
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=8452201&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
resp = requests.get(url, headers=headers)
# 打印输出
print(resp.text)

2.使用json工作包分析数据结构

我们刚刚爬取的数据,细心的人就可以发现,数据是杂乱无章的,不利于用户的阅读与分析,所以,这个时候我们就需要使用json工具或在线网页来对原本杂乱无章的数据进行分析。但是,无论你使用哪种方法,你都需要去除爬取数据的前缀与后缀,使用json工作解析均需要以{开头,以}结束
在这里插入图片描述
具体使用json工作的代码以及实现对应鞋子的尺寸与颜色如下所示:

import requests
import json
# 设置headers是为了解决服务器反爬机制
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=8452201&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
resp = requests.get(url, headers=headers)
context = resp.text
print(context)
result = context.replace("fetchJSON_comment98(", "").replace(");", "")
json_data = json.loads(result)
# print(json_data)
comments = json_data['comments']
for item in comments:
    color = item['productColor']
    size = item['productSize']
    print('鞋子颜色',color)
    print('鞋子尺码',size)

3.将数据写入Excel表中

要想将数据保存到Excel表中,需要按照以下四个步骤:
1.创建excel表格;
2.创建sheet单元格
3.在sheet中保存数据
4.把表格保存在一个磁盘里面

import requests
import json
import openpyxl
# 创建excel表格
wk = openpyxl.Workbook()
# 创建sheet
sheet = wk.create_sheet()
# 设置headers是为了解决服务器反爬机制
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=8452201&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
resp = requests.get(url, headers=headers)
context = resp.text
print(context)
result = context.replace("fetchJSON_comment98(", "").replace(");", "")
json_data = json.loads(result)
# print(json_data)
comments = json_data['comments']
for item in comments:
    color = item['productColor']
    size = item['productSize']
    # 在sheet中保存数据
    sheet.append([color, size])
    # 把表格保存在一个磁盘里面 使用相对路径
    wk.save('data.xlsx')
print('数据保存成功')

如果大家走到了这里,那么相信小伙伴们已经对Python爬虫彻底入门并且已经有较为深刻的认识。谢谢大家的阅读!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐