抓取天猫手机评论

import re
import json
import time
import requests
from bs4 import BeautifulSoup 

tm_headers = {
            "scheme": "https",
            "Connection": "keep-alive",
            "Upgrade-Insecure-Requests": "1",
            "Cache-Control" : "max-age=0",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
            "Content-Type": "text/html"

        }   

def req(url, headers):
    soup = None
    try:
        content = requests.get(url, headers=headers, timeout=2)
        code = content.status_code
        if code == 200:
            soup = BeautifulSoup(content.text, "html.parser")
    except Exception as e:
        print("get url error, url: {0}".format(url))
    return soup

def get_phone_list():
    #  获取列表url
    phone_list = []
    list_url = "https://shouji.tmall.com/?spm=a222t.8063993.a2226c3nav.5.7b8f4da0yjyxC3&acm=lb-zebra-155904-807029.1003.4.767290&scm=1003.4.lb-zebra-155904-807029.OTHER_14592967254716_767290#J_floor12"
    soup = req(list_url, tm_headers)
    txt = soup.find_all("li", class_="focus-")
    for i in txt[:-5]:
        a = i.find("a")
        name = i.find("h3").get_text()
        href = a.get("href")
        if name != "":
            itemid = href.split("id=")[-1].split("&")[0]
            phone_list.append({"url": "https:" + href, "name": name})
    return phone_list

def create_deltail_url(url, page=1, itemid=None, sellerid=None):
    # 生成评论地址,最终发现获取评论api 参数需要两个id,itemid and sellerid,sellerid 必须去详情页拿
    if itemid is None and sellerid is None:         itemid = url.split("id=")[-1].split("&")[0]         soup = req(url, tm_headers)         txt = soup.find_all("meta")[-1].get("content")         sellerid = txt.split("userid=")[-1].replace(";", "")
    comment_json_url = "https://rate.tmall.com/list_detail_rate.htm?itemId={0}&sellerId={1}&currentPage={2}".format(itemid, sellerid, page)
    return comment_json_url, itemid, sellerid

def get_deltail(db, comment_json_url, itemid, sellerid, name):
    # 调用评论接口 获取评论数据
    pagenum = None
    comment_data = req(comment_json_url, tm_headers)
    if comment_data is not None:
        count = 1
        while "paginator" not in str(comment_data) and count < 5:
            comment_data = req(comment_json_url, tm_headers)
            count += 1
            time.sleep(1)
        try:
            comment_str = str(comment_data)[15:]
            comment_json = json.loads(comment_str)
        except Exception as e:
            return None
        rateList = comment_json["rateList"]
        for item in rateList:
            data = {}
            data["itemid"] = itemid
            data["usernick"] = item["displayUserNick"]
            data["comment_content"] = item["rateContent"]
            data["comment_date"] = item["rateDate"]
            data["sellerid"] = sellerid
            # insert db
        pagenum = comment_json["paginator"]["lastPage"]
    return pagenum

if __name__ == "__main__":
    phone_list = get_phone_list()
    for phone_url in phone_list:
        name = phone_url["name"]
        url = phone_url["url"]
        print("开始抓取: {0}  手机, 页码: {1}".format(name, 1))
        comment_json_url, itemid, sellerid = create_deltail_url(url)
        pagenum = get_deltail(db, comment_json_url, itemid, sellerid, name)
        if pagenum is not None:
            page = 2
            while page < pagenum:
                print("开始抓取: {0} 手机, 页码: {1}".format(name, page))
                comment_json_url, itemid, sellerid = create_deltail_url(phone_url["url"], page, itemid, sellerid)
                get_deltail(db, comment_json_url, itemid, sellerid, name)
                page += 1
                time.sleep(2)
时间: 2024-11-05 18:59:08

抓取天猫手机评论的相关文章

[python]利用selenium模拟用户操作抓取天猫评论数据

准备: python3.5 安装selenium包 第一种方法: cmd里输pip install selenium,但是经常报错 第二种方法: 下载安装包-cmd进入解压路径-python setup.py install-报错permission denied-右键安全更改报错文件夹权限为完全控制-再次安装成功unknown error: unable to discover open pages-下载chromedriver放在环境变量目录下测试自动打开百度时提示"您使用的是不受支持的命令

Windows环境中,通过Charles工具,抓取安卓手机、苹果手机中APP应用的http、https请求包信息

Windows环境中,通过Charles工具,抓取安卓手机.苹果手机中APP应用的http.https请求包信息1.抓取安卓手机中APP应用的http请求包信息1)在电脑上操作,查看Windows机器IP地址:cmd->ipconfig 在返回的结果中,查询得到IPv4地址. a)如果你的Windows机器是通过无线方式上网,则选择 无线局域网适配器 中的IPv4中IP地址. b)如果你的Windows机器是通过有线方式上网,则选择 以太网适配器 中的IPv4中IP地址. 2)在手机上操作,在你

Android开发:使用Windows cmd窗口抓取Android手机log

写在前面的废话 一般Android开发者都会使用Eclipse,Android studio观察log输出,其实后台是使用adb来打印log的,这里介绍的是如何让log输出到cmd窗口,而不是Eclipse,Android studio中,测试人员可使用该方法给开发人员抓取log,开发人员也可以在Eclipse的logcat抽到的时候使用该方法应急用. cmd抓取Android logcat步骤 1.解压adb_tool_windows.zip.得到三个文件:adb.exe ,AdbWinApi

抓取qq音乐评论 (林俊杰-雪落下的声音) 制作词云图,是否值得一听

使用抓包工具 charles   抓取qq音乐客户端 url = "https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=798799166&loginUin=1152921504630904742&hostUin=0&format=json&inCharset=GB2312&outCharset=GB2312&notice=0&platform=jqspaframe

python爬取ajax动态生成的数据 以抓取淘宝评论为例子

在学习python的时候,一定会遇到网站内容是通过ajax动态请求.异步刷新生成的json数据的情况,并且通过python使用之前爬取静态网页内容的方式是不可以实现的,所以这篇文章将要讲述如果在python中爬取ajax动态生成的数据. 至于读取静态网页内容的方式,有兴趣的可以查看博客内容. 这里我们以爬取淘宝评论为例子讲解一下如何去做到的. 这里主要分为了四步: 一 获取淘宝评论时,ajax请求链接(url) 二 获取该ajax请求返回的json数据 三 使用python解析json数据 四

Python爬虫框架Scrapy 学习笔记 10.3 -------【实战】 抓取天猫某网店所有宝贝详情

第三部分 替换默认下载器,使用selenium下载页面 对详情页稍加分析就可以得出:我们感兴趣的大部分信息都是由javascript动态生成的,因此需要先在浏览器中执行javascript代码,再从最终的页面上抓取信息(当然也有别的解决方案). scrapy 本身提供了 Middleware机制.利用Dowloader Middleware可以改变默认的request对象和reponse对象,甚至替换默认的下载器.(可以对比JavaEE中的Filter理解Middleware) scrapy 架

mac平台使用adb、tcpdump工具抓取android手机网络包

在开发手机app的时候我们想看下自己app发出的网络请求,这个时候我们需要tcpdump工具进行抓包.要实现tcpdump抓包,需要以下几步: 这里以android 手机华为 P6为例子 1. 手机ROOT 要使用tcpdump工具,必需先获得手机的root权限,试过好几种root工具,最后发现360的一键ROOT工具可对P6这台机器root 下载PC版的360一键root工具,下载地址 , 然后用usb线将手机链接到电脑,同时打开USB调试(设置->开发人员选项->USB调试) 然后按照他的

如何使用fiddler抓取iphone手机数据请求

1.首先需安装fiddler抓包工具 2.安装成功后对fiddler进行简单配置: 打开fiddler,Tools->Fiddler Options -勾选"Decrpt HTTPS traffic",选中后Fiddler可以截获HTTPS请求 -勾选"Allow remote computers to connect",选中后允许别的机器把HTTP/HTTPS请求发送到Fiddler上 配置完成后,重新启动Fiddler        3.获取Fiddler

Mac使用Charles抓取ios手机APP中的https请求

1.配置Http代理 Port为监听端口号,默认为8888,勾选Enable transparent HTTP proxying,接着勾选SOCKS proxy,可以监听Socks请求 2.安装Charles Root Certificate,路径为Help->SSL Proxying ->InstallCharles Root Certificate 3.安装后在钥匙串中会有一条未信任的证书,双击该证书 4.跳转到该证书的设置,修改到如图 4.配置SSL代理,Proxy->SSL Pr