IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python爬虫 爬取JD商城快消品的保质期 -> 正文阅读

[Python知识库]python爬虫 爬取JD商城快消品的保质期

从网上找的程序,稍加修改,实现在JD商城上爬取商品保质期的功能。
具体步骤如下:
1)逐行读EXCL文件,获取关键词;
2)基于关键词在JD上搜索商品;
3)找到第1个商品,对比其title与关键词的匹配程度;
4)满足匹配度阈值,打开该商品详情页;
5)解析网页,检索“保质期”关键字后的字符串;
6)为提高写文件效率,每20次上述操作后,将检索到的保质期写入EXCL文件。

补充:
1)本实现主要依靠Selenium工具,该工具需要提前下载、配置工具。具体可以参考 Python 爬虫实战 — 抓取JD商品数据
**Selenium工具为 Web 应用程序的测试工具,能够操控浏览器完成一系列步骤,模拟人为操作;**比如自动填写文本,网页端查询快递单号 都是没问题的,目前支持 Java、Python、C#、Ruby 等多种语言。
2)本人python小白,下面代码仅供参考。

#! /usr/bin/python
# coding='utf-8'
"""
获取XX商城商品信息爬虫
Author: zhouzying
URL: https://www.zhouzying.cn
Date: 2018-10-15
"""
from bs4 import BeautifulSoup
import time
from selenium import webdriver
import re
# import xlrd
# import xlwt
# from xlutils.copy import copy
import openpyxl
from openpyxl import Workbook
from openpyxl.reader.excel import load_workbook

import os
import time

# 获取网页源代码
# def main():
    # product = input("请输入商品名称:")
    filepath = "record.txt"

    wb = load_workbook('goods.xlsx')
    # 获取所有表格(worksheet)的名字
    sheets = wb.get_sheet_names()
    # print(sheets)
    # # 第一个表格的名称
    sheet_first = sheets[0]

    # # 获取特定的worksheet
    ws = wb.get_sheet_by_name(sheet_first)

    # 打开浏览器
    driver = webdriver.Chrome()

    succesNum=0
    allProcessNum=0
    # 通过坐标读取值
    for i in range(36599):
        i=i+920   #中断程序重启时,记得修改此处!!
        print('excl第', i, '行')

        product=ws.cell(row=i+1, column=3).value
        if product !='品名':
            # 打印商品名
            print("excl商品名称:", product)

            # 页数控制
            index = 1
            # 设总页数total的初值为100
            total_2 = 1
            while index <= total_2:
                try:
                    page = index * 2 - 1
                    # 关键字中如果有中文字符,URL中需加入“&enc=utf-8”字符编码
                    url = 'https://search.jd.com/Search?keyword=' + str(product) + "&enc=utf-8" + "&page=" + str(page)
                    driver.get(url)
                    # 执行页面向下滑至底部的动作
                    # driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
                    # 停顿3秒等待页面加载完毕!!!(必须留有页面加载的时间,否则获得的源代码会不完整。)
                    #time.sleep(1)

                    html = driver.page_source
                    # 找到第一个商品的链接
                    urlNew = parser(html, product)

                    # 跳转至商品详情页,获取保质期
                    driver.get(urlNew)
                    # driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
                    #time.sleep(1)
                    html = driver.page_source
                    shelfDataStr=parser2(html)
                    print('找到保质期:'+shelfDataStr)

                    # 保质期写入表格
                    ws.cell(row=i+1, column=5).value = shelfDataStr

                    index += 1
                    succesNum +=1
                    print("保质期获取完成!".format(product))

                except:
                    index += 1
                    print("保质期获取失败!".format(product))

            allProcessNum +=1
            print('累计处理:成功找到保质期/所有搜索数量=', succesNum,'/',allProcessNum)
            print('------------------------------------------------------------------------')

            if i%20==0:
                print('**写文件**')
                wb.save(filename='goods.xlsx')
                print('------------------------------------------------------------------------')

    # 退出浏览器
    driver.quit()
    # wb.save(filename='goods.xlsx')


# 提取第一个商品的URL
def parser(html, product):
    #soup = BeautifulSoup(html, 'html5lib')  #lzy changed
    soup = BeautifulSoup(html)    #lzy changed
    # print(soup)

    # 定位到包含这些商品信息的代码
    #items = soup.find_all('div', 'gl-i-wrap')
    item = soup.find('div', 'gl-i-wrap')
    strTemp = item.find('div', 'p-name')
    titleInMall=item.find('div','p-name').a.em.text
    print('商城第1个商品名称: ', titleInMall)
    findInNum=0
    for itemChar in  product:
        if itemChar in titleInMall:
            findInNum=findInNum+1
            # print(itemChar,'is in',titleInMall)
    lenTemp=len(product)
    print('重合度 ',findInNum/lenTemp)
    urlNew=' '
    if (findInNum/lenTemp)>0.95:
        urlNew = 'https:'+strTemp.find('a')['href']
        print('重合度大于阈值0.95,打开第1个商品URL:'+urlNew)
    else:
        print('重合度小于阈值0.95,该商品未找到保质期!')

    return urlNew

# 提取商品详情页里的保质期信息
def parser2(html):
    soup = BeautifulSoup(html)    #lzy changed
    # (soup)
    clearfix= soup.find_all('dl', 'clearfix')
    shelfDataStr=''
    for item in clearfix:
        shelfDataStrTemp= item.text
        # print(shelfDataStrTemp)
        if '保质期' in shelfDataStrTemp:
            shelfDataStr=shelfDataStrTemp[4:]
            break

    return shelfDataStr

if __name__ == '__main__':
    main()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:46:22  更:2021-09-07 10:48:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:38:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码