这篇文章将为大家详细讲解有关怎样用计算机编程语言爬取京东的价格和标题及评价等商品情况,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
前言
代码实现
导入请求
fromlxmlimportetree
进口时间
导入随机
importpandasaspd
importjson
fromsqlalchemyimportcreate _ engine
来自sqlalchemy。万瓜格斯。oracleimportdate,FLOAT,NUMBER,VARCHAR2
importcx_Oracle先导入需要用的包
defcreate _ table(table _ name):
conn=cx_Oracle.connect('用户/密码@ ip:端口/数据库)
cursor=conn.cursor()
创建_姬寿='''CREATETABLE{}(商品IDVARCHAR2(256),价格数字(19,8),店名VARCHAR2(256),店属性VARCHAR2(256),标题VARCHAR2(256),评论数字(19),优评论数字(19))' '。格式(表名)
光标。执行(创建_姬寿)
cursor.close()
conn.close()建表
def映射_ df _ type(df _ pro):
dtypedict={}
fori,jinzip(df_pro.columns,df_pro.dtypes):
如果"对象"定义类型的映射
defsava_oracle(df_pro):
engine=create _ engine(' Oracle ://用户:密码@ IP :端口/数据库')
dtypedict=mapping _ df _ types(df _ pro)
df_pro.to_sql('姬寿,con=引擎,索引=False,if_exists='append ',dtype=dtypedict)定义请求头和请求方法
头
ers={
'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爬取京东的价格和标题及评价等商品情况就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/49006.html
