Python实战爬虫之女友欲买文胸不知何色更美

目录
  • 情景再现
  • 本文关键词
  • 挑个“软柿子”
  • 单页爬取
    • 数据处理
  • 翻页操作
  • 撸代码
    • 主调度函数
    • 页面抓取函数
    • 解析保存函数
  • 可视化
    • 颜色分布
    • 评价词云图

情景再现

今日天气尚好,女友忽然欲买文胸,但不知何色更美,遂命吾剖析何色买者益众,为点议,事后而奖励之。

本文关键词

协程并发😊、IP被封😳、IP代理😏、代理被封😭、一种植物🌿

挑个“软柿子”

打开京东,直接搜 【文胸】,挑个评论最多的

进入详情页,往下滑,可以看到商品介绍啥的,同时商品评价也在这里。

接下来重头戏,F12 打开 开发者工具,选择 Network,然后点击全部评价,抓取数据包。

将 url 打开,发现确实是评论数据。

单页爬取

那我们先写个小 demo 来尝试爬取这页的代码,看看有没有什么问题。

import requests
import pandas as pd

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
}

params = {
    'callback':'fetchJSON_comment98',
    'productId':'35152509650',
    'score':'0',
    'sortType':'6',
    'page': '5',
    'pageSize':'10',
    'isShadowSku':'0',
    'rid':'0',
    'fold':'1'
}

url = 'https://club.jd.com/comment/productPageComments.action?'
page_text = requests.get(url=url, headers=headers, params=params).text
page_text

数据处理

数据是获取了,但前面多了一些没用的字符(后面也有),很明显不能直接转成 json 格式,需要处理一下。

page_text = page_text[20: len(page_text) - 2]
data = json.loads(page_text)
data

现在数据格式处理好了,可以上手解析数据,提取我们所需要的部分。这里我们只提取 id(评论id)、color(产品颜色)、comment(评价)、time(评价时间)。

import pandas as pd

df = pd.DataFrame({'id': [],
                   'color': [],
                   'comment': [],
                   'time': []})
for info in data['comments']:
    df = df.append({'id': info['id'],
                    'color': info['productColor'],
                    'comment': info['content'],
                    'time': info['creationTime']},
                   ignore_index=True)
df

翻页操作

那么接下来就要寻找翻页的关键了,下面用同样的方法获取第二页、第三页的url,进行对比。

简单分析一下,page 字段是页数,翻页会用到,值得注意的是 sortType,字面意思是排序类型,猜测排序方式可能是:热度、时间等。经过测试发现 sortType=5 肯定不是按时间排序的,应该是热度,我们要获取按时间排序的,这样后期比较好处理,然后试了几个值,最后确定当 sortType=6 时是按评价时间排序。图中最后还有个 rid=0 ,不清楚什么作用,我爬取两个相同的url(一个加 rid 一个不加),测试结果是相同的,所以不用管它。

撸代码

先写爬取结果:开始想爬 10000 条评价,结果请求过多IP凉了,从IP池整了丶代理,也没顶住,拼死拼活整了1000条,时间不够,如果时间和IP充足,随便爬。经过测试发现这个IP封锁时间不会超过一天,第二天我跑了一下也有数据。下面看看主要的代码。

主调度函数

设置爬取的 url 列表,windows 环境下记得限制并发量,不然报错,将爬取的任务添加到 tasks 中,挂起任务。

async def main(loop):
    # 获取url列表
    page_list = list(range(0, 1000))
    # 限制并发量
    semaphore = asyncio.Semaphore(500)
    # 创建任务对象并添加到任务列表中
    tasks = [loop.create_task(get_page_text(page, semaphore)) for page in page_list]
    # 挂起任务列表
    await asyncio.wait(tasks)

页面抓取函数

抓取方法和上面讲述的基本一致,只不过换成 aiohttp 进行请求,对于SSL证书的验证也已设置。程序执行后直接进行解析保存。

async def get_page_text(page, semaphore):
    async with semaphore:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
        }
        params = {
            'callback': 'fetchJSON_comment98',
            'productId': '35152509650',
            'score': '0',
            'sortType': '6',
            'page': f'{page}',
            'pageSize': '10',
            'isShadowSku': '0',
            # 'rid': '0',
            'fold': '1'
        }
        url = 'https://club.jd.com/comment/productPageComments.action?'
        async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False), trust_env=True) as session:
            while True:
                try:
                    async with session.get(url=url, proxy='http://' + choice(proxy_list), headers=headers, params=params,
                                           timeout=4) as response:
                        # 遇到IO请求挂起当前任务,等IO操作完成执行之后的代码,当协程挂起时,事件循环可以去执行其他任务。
                        page_text = await response.text()
                        # 未成功获取数据时,更换ip继续请求
                        if response.status != 200:
                            continue
                        print(f"第{page}页爬取完成!")
                        break
                except Exception as e:
                    print(e)
                    # 捕获异常,继续请求
                    continue
        return parse_page_text(page_text)

解析保存函数

将 json 数据解析以追加的形式保存到 csv 中。

def parse_page_text(page_text):
    page_text = page_text[20: len(page_text) - 2]
    data = json.loads(page_text)

    df = pd.DataFrame({'id': [],
                       'color': [],
                       'comment': [],
                       'time': []})
    for info in data['comments']:
        df = df.append({'id': info['id'],
                        'color': info['productColor'],
                        'comment': info['content'],
                        'time': info['creationTime']},
                       ignore_index=True)

    header = False if Path.exists(Path('评价信息.csv')) else True
    df.to_csv('评价信息.csv', index=False, mode='a', header=header)
    print('已保存')

可视化

颜色分布

排名前三分别是灰粉色、黑色、裸感肤色,多的不说,自己体会哈。

评价词云图

可以看出评价的关键词大多是对上身感觉的一些描述,穿着舒服当然是第一位的~

完结撒花,该向女朋友汇报工作了~

别忘记收藏哦~

到此这篇关于Python实战爬虫之女友欲买文胸不知何色更美的文章就介绍到这了,更多相关Python 爬虫文胸内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python爬虫实战项目掌握酷狗音乐的加密过程

    1.前言 小编在这里讲一下,下面的内容仅供学习参考,切莫用于商业活动,一经被相关人员发现,本小编概不负责!读者切记切记. 2.获取音乐播放列表 其实,这就是小编要讲的重点,因为就是这部分用到了加密. 我们在搜索栏上输入我们想听的音乐,小编输入:刺客 是不是看到了一系列音乐,怎样得到这些音乐的一些信息呢?(这里指的音乐信息是指音乐的hash值和音乐的album_id值[这两个参数在获取音乐的下载链接那里会用到],当然还包括音乐的名称[不然怎么区别呢?]). 由于这一系列音乐是动态加载出来的,也就是

  • python网络爬虫之模拟登录 自动获取cookie值 验证码识别的具体实现

    目录 1.爬取网页分析 2.验证码识别 3.cookie自动获取 4.程序源代码 chaojiying.py sign in.py 1.爬取网页分析 爬取的目标网址为:https://www.gushiwen.cn/ 在登陆界面需要做的工作有,获取验证码图片,并识别该验证码,才能实现登录. 使用浏览器抓包工具可以看到,登陆界面请求头包括cookie和user-agent,故在发送请求时需要这两个数据.其中user-agent可通过手动添加到请求头中,而cookie值需要自动获取. 分析完毕,实践

  • python网络爬虫精解之正则表达式的使用说明

    目录 一.常见的匹配规则 二.常见的匹配方法 1.match() 2.search() 3.findall() 4.sub() 5.compile() 一.常见的匹配规则 二.常见的匹配方法 1.match() match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第二个是需要匹配的字符串: re.match(正则表达式,字符串) 如果该方法匹配成功,返回的是SRE_Match对象,如果未匹配到,则返回None. 返回成功后有两个方法,group()方法用来查看匹配

  • python网络爬虫精解之Beautiful Soup的使用说明

    目录 一.Beautiful Soup的介绍 二.Beautiful Soup的使用 1.节点选择器 2.提取信息 3.关联选择 4.方法选择器 5.CSS选择器 一.Beautiful Soup的介绍 Beautiful Soup是一个强大的解析工具,它借助网页结构和属性等特性来解析网页. 它提供一些函数来处理导航.搜索.修改分析树等功能,Beautiful Soup不需要考虑文档的编码格式.Beautiful Soup在解析时实际上需要依赖解析器,常用的解析器是lxml. 二.Beautif

  • python网络爬虫精解之XPath的使用说明

    目录 一.XPath的介绍 二.XPath使用 1.选取所有节点 2.获取子节点 3.获取父节点 4.属性匹配 5.文本获取 6.属性获取 7.属性多值匹配 8.多属性匹配 9.按序选择 10.节点轴选择 XPath的使用 一.XPath的介绍 XPath的几个常用规则: 表达式 描述 nodename 选取此节点的所有子节点 / 从当前节点选取直接子节点 // 从当前节点选取子孙节点 . 选取当前节点 - 选取当前节点的父节点 @ 选取属性 二.XPath使用 1.选取所有节点 test01.

  • Python实战爬虫之女友欲买文胸不知何色更美

    目录 情景再现 本文关键词 挑个"软柿子" 单页爬取 数据处理 翻页操作 撸代码 主调度函数 页面抓取函数 解析保存函数 可视化 颜色分布 评价词云图 情景再现 今日天气尚好,女友忽然欲买文胸,但不知何色更美,遂命吾剖析何色买者益众,为点议,事后而奖励之. 本文关键词 协程并发

  • Python多线程爬虫实战_爬取糗事百科段子的实例

    多线程爬虫:即程序中的某些程序段并行执行, 合理地设置多线程,可以让爬虫效率更高 糗事百科段子普通爬虫和多线程爬虫 分析该网址链接得出: https://www.qiushibaike.com/8hr/page/页码/ 多线程爬虫也就和JAVA的多线程差不多,直接上代码 ''' #此处代码为普通爬虫 import urllib.request import urllib.error import re headers = ("User-Agent","Mozilla/5.0

  • python网络爬虫实战

    目录 一.概述 二.原理 三.爬虫分类 1.传统爬虫 2.聚焦爬虫 3.通用网络爬虫(全网爬虫) 四.网页抓取策略 1.宽度优先搜索: 2.深度优先搜索: 3.最佳优先搜索: 4.反向链接数策略: 5.Partial PageRank策略: 五.网页抓取的方法 1.分布式爬虫 现在比较流行的分布式爬虫: 2.Java爬虫 3.非Java爬虫 六.项目实战 1.抓取指定网页 抓取某网首页 2.抓取包含关键词网页 3.下载贴吧中图片 4.股票数据抓取 六.结语 一.概述 网络爬虫(Web crawl

  • python实战之Scrapy框架爬虫爬取微博热搜

    前言:大概一年前写的,前段时间跑了下,发现还能用,就分享出来了供大家学习,代码的很多细节不太记得了,也尽力做了优化. 因为毕竟是微博,反爬技术手段还是很周全的,怎么绕过反爬的话要在这说都可以单独写几篇文章了(包括网页动态加载,ajax动态请求,token密钥等等,特别是二级评论,藏得很深,记得当时想了很久才成功拿到),直接上代码. 主要实现的功能: 0.理所应当的,绕过了各种反爬. 1.爬取全部的热搜主要内容. 2.爬取每条热搜的相关微博. 3.爬取每条相关微博的评论,评论用户的各种详细信息.

  • Python 3实战爬虫之爬取京东图书的图片详解

    前言 最近工作中遇到一个需求,需要将京东上图书的图片下载下来,假如我们想把京东商城图书类的图片类商品图片全部下载到本地,通过手工复制粘贴将是一项非常庞大的工程,此时,可以用Python网络爬虫实现,这类爬虫称为图片爬虫,接下来,我们将实现该爬虫. 实现分析 首先,打开要爬取的第一个网页,这个网页将作为要爬取的起始页面.我们打开京东,选择图书分类,由于图书所有种类的图书有很多,我们选择爬取所有编程语言的图书图片吧,网址为:https://list.jd.com/list.html?cat=1713

  • Python网络爬虫与信息提取(实例讲解)

    课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解析HTML页面 4.Re框架:正则框架,提取页面关键信息 5.Scrapy框架:网络爬虫原理介绍,专业爬虫框架介绍 理念:The Website is the API ... Python语言常用的IDE工具 文本工具类IDE: IDLE.Notepad++.Sublime Text.Vim & Emacs.Atom.Komodo E

  • Python网络爬虫中的同步与异步示例详解

    一.同步与异步 #同步编程(同一时间只能做一件事,做完了才能做下一件事情) <-a_url-><-b_url-><-c_url-> #异步编程 (可以近似的理解成同一时间有多个事情在做,但有先后) <-a_url-> <-b_url-> <-c_url-> <-d_url-> <-e_url-> <-f_url-> <-g_url-> <-h_url-> <--i_ur

  • Python实战之单词打卡统计

    前言 观前提醒:因为是代码控制统计,所以操作每一个步骤都很重要,否则就会报错. 操作步骤 1.将在线编辑文档导入本地. 为了方便代码处理,将导出的excel表统一放在D盘直路径下,如果没懂,你可以查看文件属性,文件属性应该是这样: 2.打开excel表,将你要统计的那天的日期改为中文(这一步很重要,因为数字索引无法进行定位,所以要改,不改就用不了) 3.因为QQ的安全防范机制做的太好了,爬虫和抓包工具都无法获取QQ信息,所以我只能采用最原始的方法进行数据获取. 你想的没错,就是复制粘贴.用电脑打

  • Python实战之手写一个搜索引擎

    一.前言 这篇文章,我们将会尝试从零搭建一个简单的新闻搜索引擎 当然,一个完整的搜索引擎十分复杂,这里我们只介绍其中最为核心的几个模块 分别是数据模块.排序模块和搜索模块,下面我们会逐一讲解,这里先从宏观上看一下它们之间的工作流程 二.工作流程 三.数据模块 数据模块的主要作用是爬取网络上的数据,然后对数据进行清洗并保存到本地存储 一般来说,数据模块会采用非定向爬虫技术广泛爬取网络上的数据,以保证充足的数据源 但是由于本文只是演示,所以这里我们仅会采取定向爬虫爬取中国社会科学网上的部分文章素材

  • Python实战练习之终于对肯德基下手

    准备工作 查看肯德基官网的请求方法:post请求. X-Requested-With: XMLHttpRequest 判断得肯德基官网是ajax请求 通过这两个准备步骤,明确本次爬虫目标: ajax的post请求肯德基官网 获取上海肯德基地点前10页. 分析 获取上海肯德基地点前10页,那就需要先对每页的url进行分析. 第一页 # page1 # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname # POST # cnam

随机推荐