'''

爬取京东商品信息:

功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取,输入时以逗号分隔,

思路: 创建webdriver对象并且调用get方法请求url,进入页面根据dom结构爬取一些简要信息,之后

通过模拟点击商品评价按钮,再分别解析没个用户的评价信息,到每页的底部时,模拟点击下一页按钮

获取新的一页数据。

提取商品信息:

商品名称: {goods_name}

商品价格: {goods_price}

好评度: {percent_con}

评价标签: {tags}

评价类型

姓名:{username}

星级:{star}

文字:{word}

评价图片: {picList}

购买类型: {order_type}

购买日期:{order_date}

点赞人数: {likes}

评论人数: {

'''

from selenium import webdriver

from selenium.common.exceptions import NoSuchElementException

from selenium.webdriver.common.keys import Keys

import time

# 根据类名用来判断元素是否存在

def isElementPresent(driver, element):

"""

用来判断元素标签是否存在,

"""

try:

driver.find_element_by_class_name(element)

# 原文是except NoSuchElementException, e:

except NoSuchElementException as e:

# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False

return False

else:

# 没有发生异常,表示在页面中找到了该元素,返回True

return True

## 获取评价

def get_evaluation(goods_detail):

js_code = '''

window.scrollTo(0,2000);

'''

driver.execute_script(js_code) # 执行js代码

## 评价详细信息

try:

comments = goods_detail.find_elements_by_class_name('comment-item')

for comment in comments:

picList = []

username = comment.find_element_by_class_name('user-info').text.replace("\n", "")

star = comment.find_element_by_class_name('comment-star').get_attribute('class')[-1] + '星级'

word = comment.find_element_by_class_name('comment-con').text.replace("\n", "")

# 调用isElementExist方法,判断元素是否存在

flag = isElementPresent(comment, 'pic-list')

if flag:

pics = comment.find_element_by_class_name('pic-list').find_elements_by_tag_name('a')

for pic in pics:

picList.append(pic.find_element_by_tag_name('img').get_attribute('src'))

order_type = comment.find_element_by_class_name('order-info').find_elements_by_tag_name('span')[0].text

order_date = comment.find_element_by_class_name('order-info').find_elements_by_tag_name('span')[-1].text

likes = comment.find_element_by_class_name('J-nice').text

sprite_comment = comment.find_element_by_class_name('comment-op').find_elements_by_tag_name('a')[2].text

goods_content = f'''

姓名:{username}

星级:{star}

文字:{word}

评价图片: {picList}

购买类型: {order_type}https://item.jd.com/100003196609.html,https://item.jd.com/100006966435.html,https://item.jd.com/100001168786.html

购买日期:{order_date}

点赞人数: {likes}

评论人数: {sprite_comment}

'''

print(goods_content)

except NoSuchElementException as e:

print(e)

def get_good(driver):

# 通过JS控制滚轮滑动获取所有商品信息

js_code = '''

window.scrollTo(0,5000);

'''

driver.execute_script(js_code) # 执行js代码

# 等待数据加载

time.sleep(2)

# 商品详情wrap

goods_detail = driver;

# 商品名称

goods_name = goods_detail.find_element_by_class_name('sku-name').text.replace("\n", " ")

# 商品价格

goods_price = goods_detail.find_element_by_class_name('price').text.replace("\n", " ")

# 评价信息

evaluation_btn = goods_detail.find_element_by_id('detail').find_element_by_class_name('tab-main').find_elements_by_tag_name('li')[4]

evaluation_btn.click()

print(evaluation_btn.text)

time.sleep(2)

# 好评度

percent_con = goods_detail.find_element_by_class_name('percent-con').text.replace("\n", " ")

# 评价tag

evaluation_tags = goods_detail.find_elements_by_class_name('tag-1')

tags = []

for tag in evaluation_tags:

tags.append(tag.text)

# 评价类型

evaluation_type_list = goods_detail.find_element_by_class_name('filter-list').find_elements_by_tag_name('li')

types = []

for type in evaluation_type_list:

if (type.get_attribute('data-tab') == 'trigger'):

types.append(type.find_element_by_tag_name('a').text)

goods_content = f'''

商品名称: {goods_name}

商品价格: {goods_price}

好评度: {percent_con}

评价标签: {tags}

评价类型: {types}

\n

'''

print(goods_content)

## 爬取评价信息

get_evaluation(goods_detail)

n =1

# 爬取后面的页面

while True:

flag = isElementPresent(goods_detail, 'ui-pager-next')

if flag:

element = driver.find_element_by_class_name('ui-pager-next')

driver.execute_script("arguments[0].click();", element)

# 等待数据加载

time.sleep(2)

n = n+1

## 爬取评价信息

get_evaluation(goods_detail)

print('%d商品页数:' % n)

else:

print('到底了.')

return

print('商品总页数:%d' % n)

if __name__ == '__main__':

# chrome_options = Options()

# chrome_options.add_argument('--headless')

# chrome_options.add_argument('--disable-gpu')

# driver = webdriver.Chrome(options=chrome_options)

# 获取用户商品的url

urlList = input('请输入爬取商品url(以逗号分割):').strip()

urlList = urlList.split(',')

# 可视化界面 需要下载 chromeDiiriver 及 chrome浏览器

driver = webdriver.Chrome()

driver.implicitly_wait(5)

for url in urlList:

driver.get(url)

get_good(driver)

driver.close();

python爬虫爬取京东商品评价_python爬取京东商品信息及评论相关推荐

  1. python爬虫搜特定内容的论文_python爬取指定微信公众号文章

    python怎么抓取微信阅清晨的阳光比不上你的一缕微笑那么动人,傍晚的彩霞比不上你的一声叹息那么心疼,你的一个个举动,一句句话语都给小编带来无尽的幸福. 抓取微信公众号的文章 一.思路分析 目前所知晓 ...

  2. python爬取网页json数据_python爬取json数据库

    手把手教你使用Python抓取QQ音乐数据(第一弹) [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二. ...

  3. Python爬虫:最牛逼的 selenium爬取方式!

    Python爬虫:最牛逼的 selenium爬取方式! 作为一个男人 在最高光的时刻 这是小编准备的python爬虫学习资料,加群:700341555即可免费获取! Python爬虫:最牛逼的 sel ...

  4. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  5. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  6. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  7. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  8. Python爬虫系列之抖音热门视频爬取

    Python爬虫系列之抖音热门视频爬取 主要使用requests库以及手机抓包工具去分析接口 该demo仅供参考,已经失效,需要抖音2019年5月最新所有接口请点击这里获取 抖音资源获取接口文档请点击 ...

  9. python爬取微博恶评_python爬取微博评论的实例讲解

    python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无论是python新入手的小白,还是已经 ...

最新文章

  1. 网上测试了很多关于PYTHON的WEBSOCKET样例,下面这个才成功了
  2. 有关Location对象,及URL的解析
  3. jpa postgresql 使用uuid作为主键
  4. Java多线程学习总结(7)——创建线程池的正确姿势
  5. php mysql 高亮显示_PHP实现多关键字加亮功能
  6. php提前输出响应及注意问题
  7. 使用MNIST数据集训练出来的模型预测自己手写数据
  8. Python: 组合管理与蒙特卡洛方法实现
  9. [MATLAB]图像处理——交通标志的识别
  10. WIFI 2.4G及5G信道一览表
  11. vmware虚拟机的基础使用
  12. 以文会友,以书传情—山西省侨商联合会召开书画艺术委员会成立大会
  13. 音频基础概念及常见编码格式
  14. undefined是什么意思啊
  15. 采样频率在频谱分析中的理解
  16. NFT 作品集推荐|Lululand《爱是永恒》
  17. 【GD32F310开发板试用】Contiki-NG在GD32F310的移植
  18. 批量删除iPhone苹果通讯录的办法
  19. SAS2x28扩展卡
  20. 哈尔滨小学计算机上课时间,哈市中小学各校新学期作息时间调整汇总,看看有没有你的学校!...

热门文章

  1. Excel的题库转换为word的题库
  2. MSP430 单片机 SHT30 SHT31 温湿度传感器 MSP430F5529 MSP430G2553 程序
  3. 抖音小店入驻条件及费用最新版,2022抖音开店,商家入门指南
  4. 计算机替换字体怎么操作,电脑替换文字怎么操作
  5. java.lang.AbstractMethodError: dm.jdbc.driver.DmdbConnection.isValid(I)Z
  6. 基于spring mvc+bootstrap 集成的返利平台 新增内容-自动对接京东数据
  7. 阿里巴巴Java开发规范(终极版v1.3.0)--个人整理
  8. 这儿有你所需要的所有关于科研的网址
  9. 05 CSS从原理到熟练 - 1
  10. 计算机桌面备份在哪里,怎样备份系统,文件备份在哪里