京东爬虫升级版——爬取手机分录下所有品牌的全部商品信息、评论信息及评论图片
一. 获取手机类别下所有品牌的ID
这里直接贴链接,此链接下的JSON文件中有所有品牌及其ID,至于此链接是如何获得的,想知道的朋友可以自己钻研下,或者留言问我。
https://list.jd.com/list.html?cat=9987,653,655&sort=sort_rank_asc&trans=1&md=1&my=list_brand
而为什么要先得到ID呢?因为经分析,京东某品牌商品的链接结构如下:
https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand_' + ID + '&delivery=1&stock=1&sort=sort_commentcount_desc&trans=1&JL=4_7_0#J_main
所以,嗯,我们进入下面的讲解
二. 获取所有品牌的链接
data1 = json.loads(requests.get(url,headers=get_user_hearder()).text)
url2_list=[]
#获取前10种品牌
for i in range(0,10):
url2 = 'https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand_' + str(data1['brands'][i][
'id']) + '&delivery=1&stock=1&sort=sort_commentcount_desc&trans=1&JL=4_7_0#J_main'
url2_list.append(url2)
我是先将所有品牌的链接先得到,存在一个列表里,当然你也可以得到一个品牌链接就爬取他下面所有的商品,爬完之后再去到下一个链接。
此时得到的链接打开后是这样的:
三. 得到该品牌下所有商品的链接
soup = BeautifulSoup(requests.get(url2_list[z]).text, "lxml")
lis = soup.find_all("li", attrs={"class": "gl-item"}) # 抓该分类下的所有产品
items = []
for li in lis:
items.append("http:" + str(li.find("a").get('href')))
同样存储在一个列表里
四. 获取商品的logo、名称、id、评论内容、评论点赞数、评论时间、回复数、追评内容、追评时间并保存在EXCEL中
解析网页,获得商品信息
pagecode=gethtml(items[i])
item_name = re.findall(r'商品名称(.*?)</li>', pagecode)[0][1:]
product_id = re.sub("\D", "", items[i])
logo = re.findall(r'title=\'(.*?)\'>品牌', pagecode)[0]
f = xlwt.Workbook()
sheet1 = f.add_sheet('%s' % ( str(product_id)), cell_overwrite_ok=True)
row0 = ["品牌", "商品名称", "商品编号", "星级评分", "评论文本", "点赞数", "评论数", '追评文本']
# 写入第一行
for k in range(0, len(row0)):
sheet1.write(0, k, row0[k])
解析json文件,获取评论信息
for j in range(0, 100):
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv119&productId=' + str(
product_id) + '&score=0&sortType=5&page=' + str(j) + '&pageSize=10&isShadowSku=0&fold=1'
print('开始爬取第' + str(j + 1) + '页')
html = requests.get(url)
data = getdata(url)
download(logo, item_name , product_id,data, j)
最后得到的结果如下:
五.代码中使用的方法定义说明
本只爬虫只是之前的升级版,许多方法在我之前博文中有,只是之前用的是mysql数据库存储的,这次我用的是excel,所以唯一需要补充的也就在这了
def write_to_excel(logo,item_name,product_id,score,content,time,usefulVoteCount,replyCount,appendcontent,appendtime,i):
sheet1.write(i + 1, 0, logo)
sheet1.write(i + 1, 1, item_name)
sheet1.write(i + 1, 2, product_id)
sheet1.write(i + 1, 3, score)
sheet1.write(i + 1, 4, content)
sheet1.write(i + 1, 5, time)
sheet1.write(i + 1, 6, usefulVoteCount)
sheet1.write(i + 1, 7, replyCount)
sheet1.write(i + 1, 8, appendcontent)
sheet1.write(i + 1, 9, appendtime)
f.save('%s.xls' %str(item_name))
好了,思路及大体代码都在这里,欢迎大家讨论及指点。。。