爬虫——爬取京东评价

爬京东商品的评价

如果同学们对爬虫不是很了解的话,可以先看下爬虫的定义、原理。在这里我给大家推荐一篇文章:
  https://www.cnblogs.com/sss4/p/7809821.html


首先,我们拿一件商品的链接来作为例子这是一个2080ti的链接,博主已经沉浸在暴富的粪坑里了
https://item.jd.com/8797490.html#crumb-wrap

PS:由于京东的网址是动态的,所以那些headers之类的东西,要根据你自己的网址查找

用火狐或谷歌打开此链接(我用的是谷歌),然后点击右键——检查(或者按F12)

我们要找到评价的json文件
进去Network后,刷新一下,再点击评价,接着就按图片的指示进行。(productPageComments.action?callback=)
在这里插入图片描述
再返回来找到这个Headers
在这里插入图片描述

多说无用,上代码

第一步,获取内容

import requests,json
#url是Headers里的Requests URL
url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
//headers的内容在Headers里面都可以找到
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
        'Request Method':'Get',
         'callback':'fetchJSON_comment98vv375'
        }
req=requests.get(url ,timeout=30,headers=headers)
req.text

运行结果:
在这里插入图片描述

第二步,解析内容

//先把不用的内容去掉,再用json库解析它,得到我们想要的东西
jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
//通过type(),我们可知jd是一个字典
print(type(jd))
jd

运行结果:
在这里插入图片描述

第三步,通过key来找到所有的评论

jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
print(jd['comments'])

运行结果:
在这里插入图片描述
由图可知,key为 conent 的内容就是我们想要的评价了

第四步,遍历输出每一条评价

j=1
for i in jd['comments']:
    print(str(j)+"、"+i['content'])
    j+=1

运行结果:
在这里插入图片描述

接下来,就是整合代码了

import requests,json
url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
        'Request Method':'Get',
         'callback':'fetchJSON_comment98vv375'
        }
# 获取网页信息
req=requests.get(url ,timeout=30,headers=headers)
# req.text
#先把不用的内容去掉,再用json库解析它,得到我们想要的东西
jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
j=1
#遍历出每条评价
for i in jd['comments']:
    print(str(j)+"、"+i['content'])
    j+=1

运行成功的小伙伴可能会发现,我们爬出来的评价为什么只有这么几条呢?其实,京东的评价,它每一页只有这么几条。那么,如果我们想要爬取所有的评价,应该怎么做呢?很简单,只要循环的执行以上的代码,就可以了。

我们只需改动以上的代码,就可以实现我们想要的功能了。(话不多说,上代码)
通过观察,我们可知url是通过page这个参数来控制页数的,所以我们找到这个地方,就可以实现翻页功能
后来我加上了词云分析评价的功能(刚学的,挺好玩的)

import requests,json
#下面的库是用来做词云的
#import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
from PIL import Image
j=1
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
            'Request Method':'Get',
             'callback':'fetchJSON_comment98vv375'
         		}
#存放评价
content=[]
def f(url):
    # 获取网页信息
    req=requests.get(url ,timeout=30,headers=headers)
    # req.text
    #先把不用的内容去掉,再用json库解析它,得到我们想要的东西
    jd=json.loads(req.text.lstrip("fetchJSON_comment98vv375(").rstrip(");"))
    #global:声明变量的作用域为全局作用域
    global j
    for i in jd['comments']:
        content.append(i['content'])
#这里我们只爬10页做个例子
for i in range(10):
    url="https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv375&productId=8797490&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1".format(i)
    f(url)
#print(content) 
#====================
#这部分可以去掉的
content=''.join(content)
# bg_img=np.array(Image.open("../picture/1.png"))
wordcloud=WordCloud(font_path="c:/Windows/Fonts/simkai.ttf",stopwords=STOPWORDS).generate(content)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

运行结果:
在这里插入图片描述
注意:如果爬太多页的话,就会报错(应该是被发现我们是爬虫了)。以我目前的水平,还不知道怎么解决,呜呜!)。

好啦,本次的笔记就到这里了,如果有疑惑或者会解决我最后的小bug的话,可以给我留言哦,我看到的话,会回复的嘻嘻!

Python爬取京东手机参数通常涉及到网络爬虫技术,其中Pandas库常用于数据处理,BeautifulSoup或Scrapy框架则用于解析HTML网页。以下是一个简单的示例,说明如何分页爬取京东商城的手机商品信息: 首先,安装必要的库: ```bash pip install requests beautifulsoup4 pandas ``` 然后,编写一个基本的爬虫脚本,这里以requests和BeautifulSoup为基础: ```python import requests from bs4 import BeautifulSoup import pandas as pd def get_page_content(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: print(f"请求失败,状态码:{response.status_code}") return None def parse_page(html): soup = BeautifulSoup(html, 'html.parser') # 提取商品信息,假设手机参数在`div`标签内,如品牌、型号、价格等 phones_info = soup.find_all('div', class_='product-info') data = [] for info in phones_info: brand = info.find('span', class_='p-name').text.strip() model = info.find('span', class_='p-name-detail').text.strip() price = info.find('em', class_='p-price').text.strip() # 添加其他参数,例如内存、分辨率等 # memory = info.find('span', class_='some-class-for-memory').text.strip() if exists else '' # resolution = info.find('span', class_='some-class-for-resolution').text.strip() if exists else '' data.append({ 'Brand': brand, 'Model': model, 'Price': price, # ...其他参数 }) return data def fetch_jd_phone_params(start_url, num_pages=1): phone_data = [] for i in range(num_pages): url = f"{start_url}?page={i + 1}" html = get_page_content(url) if html is not None: parsed_data = parse_page(html) phone_data.extend(parsed_data) df = pd.DataFrame(phone_data) return df # 示例开始URL start_url = "https://search.jd.com/Search?keyword=%E7%A7%BB%E5%8A%A8&enc=utf-8&wq=%E7%A7%BB%E5%8A%A8" # 爬取并保存结果 df = fetch_jd_phone_params(start_url) df.to_csv('jd_phones.csv', index=False) print("爬取完成,数据已保存到jd_phones.csv")
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值