您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎樣用Python爬取京東的價格和標題及評價等商品情況,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
前言
代碼實現
import requests from lxml import etree import time import random import pandas as pd import json from sqlalchemy import create_engine from sqlalchemy.dialects.oracle import DATE,FLOAT,NUMBER,VARCHAR2 import cx_Oracle
先導入需要用的包
def create_table(table_name): conn = cx_Oracle.connect('user/password@IP:port/database') cursor = conn.cursor () create_shouji = ''' CREATE TABLE {}( 商品ID VARCHAR2(256), 價格 number(19,8), 店名 VARCHAR2(256) , 店屬性 VARCHAR2(256) , 標題 VARCHAR2(256) , 評論 NUMBER(19), 優評論 NUMBER(19) ) '''.format(table_name) cursor.execute(create_shouji) cursor.close() conn.close()
建表
def mapping_df_types(df_pro): dtypedict = {} for i, j in zip(df_pro.columns, df_pro.dtypes): if "object">
定義類型的映射
def sava_oracle(df_pro): engine = create_engine('oracle://user:password@ip:port/database') dtypedict = mapping_df_types(df_pro) df_pro.to_sql("shouji",con=engine,index=False,if_exists='append',dtype=dtypedict)
定義請求頭和請求方法
headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36 Edg/83.0.478.37' } def requesturl(url): session = requests.Session() rep = session.get(url,headers=headers) return rep
解析評論的url
def commreq(url_comm): dd_commt = pd.DataFrame(columns=['商品ID','評論','優評論']) session = requests.Session() rep_comm = session.get(url_comm,headers=headers) comment = json.loads(rep_comm.text)['CommentsCount'] comment_list = [] for i in comment: comment_list.append({'商品ID':str(i['ProductId']),'評論':i['CommentCount'],'優評論':i['GoodCount']}) dd_commt = dd_commt.append(comment_list) return dd_commt
主體解析
def parse(rep): df = pd.DataFrame(columns=['商品ID','價格','店名','店屬性','標題']) html = etree.HTML(rep.text) all_pro = html.xpath("//ul[@class='gl-warp clearfix']/li") proid = ','.join(html.xpath("//li/@data-sku")) # 商品評價url # referenceIds=之后到&callback之前,都是商品的id,只需要在商品列表獲取商品id拼接即可 # 1. 評論解析 url_comm = r'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={}'.format(proid) dd_commt = commreq(url_comm) # 2. 商品列表信息解析 pro_list = [] for product in all_pro: proid = ''.join(product.xpath("@data-sku")) price = ''.join(product.xpath("div[@class='gl-i-wrap']//strong/i/text()")) target = ''.join(product.xpath("div[@class='gl-i-wrap']//a/em//text()")).replace('\t\n','').replace('\\u2122','') shopname = ''.join(product.xpath("div[@class='gl-i-wrap']//span/a/@title")) shoptips = product.xpath("div[@class='gl-i-wrap']//i[contains(@class,'goods-icon')]/text()") if '自營' in shoptips: shoptips='自營' else: shoptips='非自營' pro_list.append(dict(商品ID=proid,價格=price,店名=shopname,店屬性=shoptips,標題=target)) df = df.append(pro_list) # 3. 合并商品評論和列表 df_pro = pd.merge(df,dd_commt,on='商品ID') return df_pro
加入主程序
if __name__ == "__main__": create_table('shouji') for i in range(1,81): url = 'https://search.jd.com/s_new.php?keyword=手機&wq手機&ev=3613_104528%5E&page={0}&s=30'.format(i) rep = requesturl(url) df_pro = parse(rep) sava_oracle(df_pro) time.sleep(random.randrange(1,4)) print('完成:',i)
關于怎樣用Python爬取京東的價格和標題及評價等商品情況就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。