1.导入模块

import random
import re
import time
import xlsxwriter
from selenium import webdriver
from lxml import etree
import requests

2.构建ua池和ip池

# ua池
ua_list = ["Mozilla/5.0 (Windows NT 10.0; Win64; x32) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.39 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.26 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36','Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/17D50 UCBrowser/12.8.2.1268 Mobile AliApp(TUnionSDK/0.1.20.3)','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36','Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 8.1.0)','Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36','Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.14.0 main%2F1.0 baiduboxapp/11.18.0.16 (Baidu; P2 13.3.1) NABar/0.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',]
ua = random.choice(ua_list)
# Ip池
proxy_list = [{"http" or "https": "124.71.14.222:10002"},{"http" or "https": '60.167.133.17:1133'},{"http" or "https": '183.0.203.167:8118'},{"http" or "https": '111.231.86.149:7890'},{"http" or "https": "183.0.203.167:8118"},{"http" or "https": '163.125.222.12:8118'},{"http" or "https": '111.59.199.58:8118'},
]
proxies = random.choice(proxy_list)

3.获取商品链接和id

word = input('请输入你要获取的商品:', )
page = input('请输入商品页数:',)
# 获取商品链接和id
def get_link():links = []skus_id = []for i in range(int(page)):url = f'https://search.jd.com/Search?keyword={word}&wq={word}&page={i}'headers = {"user-agent": ua,}res = requests.get(url=url, headers=headers, proxies=proxies).texttime.sleep(0.5)# print(res)# 提取商品链接并进行拼接操作html = etree.HTML(res)link = html.xpath('//*[@id="J_goodsList"]/ul/li[*]/div/div[3]/a/@href')link = ['https:' + k for k in link]for l in link:links.append(l)# 提取商品idsku_id = [re.findall('\d+', i)[0] for i in link]for s in sku_id:skus_id.append(s)print(f'第{i+1}页。')print(links)goods(links, skus_id)

4.获取商品详情数据

# 获取商品详情
def goods(links, skus_id):goo = []pict = 0for i in range(len(links)):headers = {"User-Agent": ua,'referer': 'https://search.jd.com/',}res = requests.get(url=links[i], headers=headers, proxies=proxies).texttime.sleep(2)# print(res)html = etree.HTML(res)# 店铺名称title = html.xpath('//*[@id="crumb-wrap"]/div/div[2]/div[2]/div[1]/div/a/@title')print(title)# 品牌brand = html.xpath('//*[@id="parameter-brand"]/li/@title')print(brand)# 商品编号serial = html.xpath('//*[@id="detail"]/div[2]/div[1]/div[1]/ul[2]/li[2]/text()')serial = [serial[0].split(':')[-1]]print(serial)# 正式商品名称official = html.xpath('//*[@id="detail"]/div[2]/div[1]/div[1]/ul[2]/li[1]/text()')official = [official[0].split(':')[-1].strip()]print(official)# 网页商品名称name = html.xpath('/html/body/div[6]/div/div[2]/div[1]/text()')if len(name) == 1:name = [name[0].strip()]elif len(name) == 2:name = [name[1].strip()]print(name)# 商品第一张主图片picture = ['https:' + html.xpath('//*[@id="spec-img"]/@data-origin')[0]]print(picture)res2 = requests.get(url=picture[0], headers=headers)with open(f'D:\pythonproject\python项目爬虫\接单\京东商品评价获取(接单考核)\商品图片/{pict}.jpg', 'wb')as f:f.write(res2.content)pict += 1# 京东价,请求价格信息jsonp = requests.get('https://p.3.cn/prices/mgets?skuIds=J_' + skus_id[i], headers=headers, proxies=proxies).textprint(p)price = re.findall('"p":"(.*?)","op"', p)print(price)# 优惠劵和促销options = webdriver.ChromeOptions()# 无界面模式options.add_argument('--headless')driver = webdriver.Chrome(options=options)driver.get(links[i])time.sleep(1)# 获取源代码data = driver.page_sourcetime.sleep(0.5)driver.close()driver.quit()# 促销html2 = etree.HTML(data)promotion1 = html2.xpath('//*[@id="prom"]/div/div[1]/em[2]/text()')promotion2 = html2.xpath('//*[@id="prom"]/div/div[2]/em[2]/text()')if promotion1 == [] and promotion2 == []:promotion = ['暂无促销信息']elif promotion1 == [] and promotion2 != []:promotion = promotion2elif promotion2 == [] and promotion1 != []:promotion = promotion1else:promotion = [promotion1[0], promotion2[0]]print(promotion)# 优惠劵信息coupon = html2.xpath('//*[@id="summary-quan"]/div[2]/dl/dd/a/span/span/text()')if coupon == []:coupon = ['暂无可领的优惠券']print(coupon)# 累计评价comm_url = f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={skus_id[i]}'comment_headers = {'user-agent': ua,}res_js = requests.get(url=comm_url, headers=comment_headers, proxies=proxies).textcomment = re.findall('"CommentCountStr":"(.*?)","CommentCount":', res_js)print(comment)for g in zip(title, brand, serial, official, name, price, promotion, coupon, comment, picture):goo.append(g)print(f'第{i+1}件商品打印完成。')print(goo)save(goo)

5.数据保存,并通过xlsxwrite进行图片保存

# 数据保存
def save(goo):# 创建工作簿workbook = xlsxwriter.Workbook('京东商品详情.xlsx')# 创建工作表worksheet = workbook.add_worksheet(word)# 大部分样式如下:format = {# 'font_size': 10,  # 字体大小'bold': True,  # 是否粗体# 'bg_color': '#101010',  # 表格背景颜色# 'fg_color': '#00FF00',# 'font_color': '#0000FF',  # 字体颜色'align': 'center',  # 水平居中对齐'valign': 'vcenter',  # 垂直居中对齐# 'num_format': 'yyyy-mm-dd H:M:S',# 设置日期格式# 后面参数是线条宽度'border': 1,  # 边框宽度'top': 1,  # 上边框'left': 1,  # 左边框'right': 1,  # 右边框'bottom': 1  # 底边框}style = workbook.add_format(format)# 写入图片a = 0worksheet.set_column(9, 9, 350)  # 设置列宽for i in range(len(goo)):worksheet.set_row(i + 1, 350)  # 设置行高350worksheet.insert_image(i + 1, 9, f'D:\pythonproject\python项目爬虫\接单\京东商品评价获取(接单考核)\商品图片/{a}.jpg', {'url': goo[i][-1]})a += 1# 写入数据col = ('店铺名称', '品牌', '商品编号', '正式商品名称', '网页商品名称', '京东价', '促销', '优惠劵', '累计评价', '商品第一张主图片',)for i in range(len(col)):worksheet.write(0, i, col[i])for i in range(len(goo)):for c in range(len(col) - 1):worksheet.write(i + 1, c, goo[i][c], style)workbook.close()

6.开启程序

if __name__ == '__main__':get_link()

不足之处还有很多,希望大佬不要喷我。。。。

利用python爬取京东商品的详情信息相关推荐

  1. 利用python爬取京东华为旗舰店手机信息(价格、型号、颜色、链接等)

    目 录 第一章.前言 1.1.效果展示 1.2.需要用到的库 1.3.原理分析 第二章.代码分开讲解 2.1.对象的定义及初始化 2.1.1.第一至二行 2.1.2.第三至四行 2.1.3.第五至六行 ...

  2. 利用Python爬取京东商品的一种办法!

    前言 如今的京东.淘宝.天猫等等已经不同往日了, 在用户不登录的情况下, 很难通过技术手段来大规模获取到我们关注的商品信息. 关于京东等购物网站的自动登录也有很多人在做, 但是大厂的反爬能力确实很强, ...

  3. python爬取京东商品数据要先登录_手把手教你用python 爬取京东评论

    本次python实战,主要目标是利用 Python爬取京东商品评论数,如上图所示:爬取"Python之父"推荐的小蓝书,这些信息主要包括用户名.书名.评论等信息. 爬取的网址url ...

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

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

  5. Python爬取京东商品评论

    京东商城的页面不是静态页面,其评论信息存放于json文件中,由ajax控制,所以我们在浏览器上看到的网页源代码和用Python爬下来的是不一样的,所以我们真正要爬取的是评论数据所存放的json文件. ...

  6. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

  7. Python 爬取京东商品评论 + 词云展示

    利用python爬虫爬取京东商品评论数据,并绘制词云展示. 原文链接:https://yetingyun.blog.csdn.net/article/details/107943979 创作不易,未经 ...

  8. Python爬取京东商品数据

    一.前言 由于京东反爬技术较强,使用常规方法爬取其数据行不通,且使用逆向分析技术又具有一定难度,所以本文将直接使用selenium爬取京东商品数据.若不知道怎么安装和配置selenium,请点击查阅笔 ...

  9. python爬取京东商品信息代码_爬取京东商品信息

    利用 BeautifulSoup + Requests 爬取京东商品信息并保存在Excel中 一.查看网页信息 打开京东商城,随便输入个商品,就选固态硬盘吧 先看看 URL 的规律,可以看到我们输入的 ...

最新文章

  1. Linux下进程通信知识点学习笔记(一)
  2. 廖雪峰 python_40岁老男人从0开始学python实录(第1天)
  3. HTML5开发 桌面提醒功能
  4. jquery数组(操作数组元素)
  5. 云原生应用 Kubernetes 监控与弹性实践
  6. html将两张图重叠居中代码,【CSS技巧】多图片的垂直居中排版
  7. 如何从Alfresco中提取Language Pack
  8. Spring Cloud 服务治理
  9. 【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】
  10. python pdf编辑器开发_使用pymupdf开发pdf查看编辑器
  11. ​重磅:IBM以340亿美元收购红帽软件 或将成为云计算市场领军者
  12. 游戏开发bug解决思路
  13. OpenDaylight(ODL)学习笔记
  14. 天啦噜!我竟然见到了超级网红区块链本人
  15. Android中手写签名的实现
  16. 信号和电源隔离的有效设计技术
  17. 信息爆炸时代的纳米技术-分子通信
  18. failed to connect to ‘192.168.*.*:5555‘: Connection refused
  19. ADD_MONTHS函数的使用
  20. 不一般的Cover Letter

热门文章

  1. Python安装包报错ERROR: Could not find a version that satisfies the requirement XXX解决方法
  2. Excel行列数字字母转换实现
  3. EtherCAT协议介绍
  4. PLC的高低字节转换
  5. CT探测器中“排”与“层”的实现方法
  6. 燃气管道定位83KHZ地下电子标识器探测仪ED-8000操作说明1
  7. 小科普:说说ANT+和蓝牙4.0的那些事
  8. 树莓派Raspberry Pi - 文件共享
  9. Spring构造器的三种注入方式
  10. 面向对象封装放大镜js代码