content

  • 要求
  • commodity
  • mysql

要求

以饮料这一品种为例,获取10个页面的商品信息。具体包括详情页中的商品名称、价格、商品介绍(包括图片)、规格包装



数据库字段要求

commodity

import requests
from scrapy import Selector
import requests
import json
import re
import mysql
import time
import threading
#import datetime
def get_proxy(website):while True:resp = requests.get(f'http://proxy.aigauss.com/proxy/next/{website}')try:j = resp.json()p = f'{j["ip"]}:{j["port"]}'print('使用代理 %s' % p)return {'http': p,'https': p}except:print(f'获取代理异常: {resp.text}')time.sleep(2)def request_get(url):"""通用请求:param url::return:"""payload = {}headers = {'authority': 'p.3.cn','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36','accept': '*/*','referer': 'https://search.jd.com/','accept-language': 'zh-CN,zh;q=0.9',# 'Cookie': 'token=0af978cad27e9de4ef38e1d557b933c9,1,909184'}# 动态网页访问还是看一下postman就算请求内容不要经过js渲染proxies=get_proxy('jd') #获取百度代理response = requests.request("GET", url, headers=headers, data=payload,proxies=proxies)return response.textdef get_list(page):url="https://search.jd.com/Search?keyword=饮料&qrst=1&stock=1&pvid=d9f1f93b10b84ccbb39ffc80192158e8&" \"page={}&s=1&click=0".format(page)res=request_get(url)res=Selector(text=res)lst = []for li in res.xpath('//div[@id="J_goodsList"]//li'):dic = {}#放在循环外面 全部重复print(li)dic['sku'] = li.xpath('.//@data-sku').get()dic['spu'] = li.xpath('.//@data-spu').get()lst.append(dic)return lstdef get_pic(sku,spu):'''获取详情页图片信息:param sku::param spu::return:sku spu中spu为空,分析发现其中spu==sku 除此之外有少量不等的情况忽略'''if spu == '':print("spu is null",sku)spu=sku#return []url = "https://cd.jd.com/description/channel?skuId={}&mainSkuId={}" \"&charset=utf-8&cdn=2&callback=showdesc".format(sku, spu)imgcon=request_get(url)doc = imgcon[9:-1]# print(res)#print("url{}",url)print("doc[:10]{}".format(doc[:10]))doc = json.loads(doc)htmlc = doc["content"]res=Selector(text=htmlc)print(imgcon)lst = []try:imgcon = res.xpath("//style/text()").get()image_row = re.compile(r'\.ssd-module-wrap \.(.*?)\{.*?\((.*?)\)')image_info = re.findall(image_row, imgcon)for image in image_info:item = {'image_id': image[0],'image_url': 'https:' + image[1]}lst.append(item['image_url'])except TypeError:# 访问异常的错误编号和详细信息for i in res.xpath("//img//@data-lazyload"):img_link = "https:" + i.get()[2:-2]lst.append(img_link)except Exception as e:print(e.args)return lstdef basic_info(sku):'''获取详情页商品介绍+价格+商品名称信息:param sku::return:'''url1 = "https://item.jd.com/{}.html".format(sku)url2 = "https://item-soa.jd.com/getWareBusiness?skuId={}".format(sku)res = request_get(url1)res = Selector(text=res)#获取商品介绍print(url1)name = ""try:for i in res.xpath('//div[@class="sku-name"]//text()'):# 在名称前面有多个image 文字取最后一个name=i.get().strip()print(name)except AttributeError:name = res.xpath('//div[@class="sku-name"]//text()').get().strip()#else:针对exceptif name == "":print("name is null ",url1)lst = []# 品牌和其他属性介绍所在标签不同brank=res.xpath('//div[@class="p-parameter"]//li//text()').get()brank=res.xpath('//div[@class="p-parameter"]//li//a//text()').get()+branklst.append(brank)for li in res.xpath('//div[@class="p-parameter"]//li'):str=li.xpath('.//text()').get()print(str)lst.append(str)intro=';'.join(lst)#获取商品信息  包装规格等dic={}for dl in res.xpath('//div[@class="Ptable-item"]/dl/dl'):keys=dl.xpath('.//dt//text()').get()values = dl.xpath('.//dd//text()').get()dic[keys]=values# 获取商品价格res = request_get(url2)price = json.loads(res)["price"]["p"]return name,price,intro,dicdef get_page(i):lst = get_list(2 * i - 1)for dic in lst:try:data = {}data['pic'] = str(get_pic(dic['sku'], dic['spu']))name, price, intro, size2pack = basic_info(dic['sku'])# mysql要输入字符串data['name'], data['price'], data['intro'], data['size2pack'] = name, price, str(intro), str(size2pack)print(data)mysql_client.insert_one('jd', data)except Exception as e:print("{}".format(repr(e)))if __name__ == "__main__":conn, cur = mysql.mysql_conn()mysql_client = mysql.MysqlORM(conn, cur)for i in range(11):get_page(i)

mysql

import pymysql
from pymysql.cursors import DictCursordef mysql_conn():"""开发连接库"""_conn = pymysql.connect(host='localhost',user='root',passwd='123454321',database='practice',port=3306,charset='utf8mb4')_cur = _conn.cursor(DictCursor)return _conn, _curclass MysqlORM(object):def __init__(self, conn, cur):self.conn = connself.cur = curdef insert_one(self, table: str, data: dict):name = ','.join(data.keys())print(name)col = ','.join('%({})s'.format(k) for k in data.keys())print(col)sql = f'insert ignore into {table}({name}) values({col})'self.cur.execute(sql, data)self.conn.commit()rowid = self.cur.lastrowidprint(f'{table} 插入一条数据 {rowid}')return rowiddef update_one(self, table: str, data: dict, fixed: list):fileds = [f'{name}=%({name})s' for name in data.keys() if name not in fixed]where_phrase = [f'{name}=%({name})s' for name in fixed]where = ' and '.join(where_phrase)update_sql = f'update {table} set {",".join(fileds)} where {where}'self.cur.execute(update_sql, data)self.conn.commit()print(f'{table} 更新一条数据到 {table} 成功')

京东商品数据数据爬取相关推荐

  1. python爬虫爬取京东商品评价_python爬取京东商品信息及评论

    ''' 爬取京东商品信息: 功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取 ...

  2. python爬取京东商品价格走势,python爬取京东店铺商品价格数据(已过期)

    # -*- coding:utf-8 -*- import requests import re import random import time import json from requests ...

  3. 案例1:京东商品页面的爬取

    本节使用Requests库对京东商品的某一个页面进行爬取. 目标网址链接:https://item.jd.com/100002795959.html import requests if __name ...

  4. requests库的使用之京东商品页面的爬取

    按如下代码所示爬取京东商品页面信息: 上面代码: import requests url="https://item.jd.com/10021098268175.html?extension ...

  5. Python爬取京东商品评论数据

    一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...

  6. python爬虫爬取京东商品评价_网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  7. 网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  8. pythonallowpos_利用Python抓取并分析京东商品评论数据

    2.1 内容简介 本章主要介绍如何利用Python抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色等颜色, 70B到90D ...

  9. python新闻评论分析_使用 python 抓取并分析京东商品评论数据

    本篇文章是python爬虫系列的第三篇,介绍如何抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色三种颜色, 70B到90D ...

  10. python爬虫爬取京东_Python爬虫学习 爬取京东商品

    1. 本节目标 以抓取京东 App 的商品信息和评论为例,实现 Appium 和 mitmdump 二者结合的抓取.抓取的数据分为两部分:一部分是商品信息,我们需要获取商品的 ID.名称和图片,将它们 ...

最新文章

  1. Activemq的连接方式
  2. LNMP_ 配置文件
  3. 如何用excel筛选相似内容_Excel筛选你用好了么?别再下拉点点点了
  4. idea运行项目报错Cannot run program “C:\Program Files\Java\jdk1.8.0_121\bin\java.exe......解决办法
  5. 大型电商网站的页面静态化方案是如何支撑亿级流量的?
  6. python让函数抛出异常,是否有任何对象可以使str()函数在python中抛出错误或异常?...
  7. Link-Cut Tree
  8. .NET串口通讯解决方案
  9. python图论库_Python 图论工具
  10. NOIP2018游记(更新完毕)
  11. 英文名称(缩写)汇总
  12. 【java期末复习题】第15章 JDBC数据库编程
  13. DIY智能车赛优胜奖开源作品——手机遥控麦克纳姆轮小车(1)
  14. Quorum快速部署
  15. hdu4489(递推)
  16. CSS基础五(盒模型)
  17. 网页数据库服务器连接超时,数据库服务器连接超时
  18. [YOLOv7/YOLOv5系列算法改进NO.21]CNN+Transformer——主干网络替换为又快又强的轻量化主干EfficientFormer
  19. 精彩回顾 | 客户体验官俱乐部(CEOC)首届主题论坛在深圳圆满落幕
  20. “云计算机”是什么?

热门文章

  1. Cardboard Unity SDK Reference 翻译版
  2. linux 按键检测 防抖,GPIO输入——按键检测
  3. Java--身份证号校验
  4. 富文本粘贴word文档内容图片处理
  5. Linux 多线程编程实验知识整理
  6. hadoop的单机版测试和集群节点的搭建
  7. C++实现骰子涂色算法
  8. 纯CSS3画哆啦A梦
  9. ZOJ - 3939 The Lucky Week【简单方法】
  10. Python同时显示多张图片在一个画面中(两种方法)