selenium JD爬虫

2023-05-16

python3.7+win10

# -*- coding: utf-8 -*-
# @Time : 2022/6/27 16:55
# @Author : 刘浪
# @File : JD_spider.py


import requests
from lxml import etree
import xlwt
from spider_seting import * #请求头模块
import time
from selenium import webdriver
import random


#禁用警告
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

class Excel:

    # 当前行数
    _current_row = 1

    # 初始化,创建文件及写入title
    def __init__(self, sheet_name='sheet1'):
        # 表头,放到数组中
        title_label = ['商品编号', '商品名称', '图片路径', '价格', '商家', '商品详情地址']
        self.write_work = xlwt.Workbook(encoding='ascii')
        self.write_sheet = self.write_work.add_sheet(sheet_name)
        for item in range(len(title_label)):
            self.write_sheet.write(0, item, label=title_label[item])

    # 写入内容
    def write_content(self, content):
        for item in range(len(content)):
            self.write_sheet.write(self._current_row, item, label=content[item])
        # 插入完一条记录后,换行
        self._current_row += 1
    # 保存文件
    def save_file(self, file_url='./dj_data.xls'):
        try:
            self.write_work.save(file_url)
            print("文件保存成功!文件路径为:" + file_url)
        except IOError:
            print("文件保存失败!")



def get_html(url):
        # 模拟浏览器访问
        chrome_driver_path = "C:/Users/Administrator/Desktop/TEM/chromedriver.exe"
        option = webdriver.ChromeOptions()
        option.binary_location = "G:/360browser/360Chrome/Chrome/Application/360chrome.exe"  # 这里是你指定浏览器的路径
        option.add_argument('--no-sandbox')
        #option.add_argument('--headless')#是否可视
        option.add_argument('--disable-gpu')
        option.add_experimental_option('excludeSwitches', ['enable-automation'])#不显示“正受到自动测试软件控制”
        browser = webdriver.Chrome(executable_path=chrome_driver_path, chrome_options=option)
        browser.get(url)
        time.sleep(random.randint(1, 2))
        #browser.maximize_window()#最大化显示
        browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
        time.sleep(random.randint(1, 3))
        source = browser.page_source  # 获取该网页源码
        html = etree.HTML(source)  # 解析网页
        browser.quit()
        return html






def save_data(search_url):
    html = get_html(search_url)
    # 商品列表
    goods_list  = html.xpath(r'.//li[@class="gl-item"]')
    # 商品编号list
    serial_num_list = html.xpath(r"//li[@class='gl-item']/@data-sku")
    for li,serial_num in zip(goods_list,serial_num_list):  # 遍历父节点

        # 商品名称
        name ="".join(li.xpath(r"div/div[@class='p-name p-name-type-2']/a/em/text()"))
        # 图片路径
        img_url ="https:"+"".join(li.xpath(r'.//div/div/a/img/@src')) if  "".join(li.xpath(r'.//div/div/a/img/@data-lazy-img'))=="done" else  "https:"+"".join(li.xpath(r'.//div/div/a/img/@data-lazy-img'))
        # 价格
        price =  li.xpath(r".//div/div/strong/i/text()")
        # 商家
        shop = li.xpath(r".//div/span/a/text()")
        # 商品详情地址
        detail_addr = "https:"+"".join(li.xpath(r".//div/div[1]/a/@href"))
        goods = [serial_num, name, img_url, price, shop, detail_addr]
        excel.write_content(goods)

    # 保存文件,使用的是相对目录(也可以使用绝对路径),会保存在当前文件的同目录下。文件名为dj_data.xls,必须是.xls后缀
    excel.write_work.save("./dj_data.xls")



if __name__ == '__main__':
    # 创建文件
    excel = Excel()
    # 搜索关键字
    keyword =input("输入搜索的关键词=")
    for page in range(1,200,2):
        #搜索地址
        search_url= 'https://search.jd.com/Search?keyword=' + keyword + "&page="+str(page)+'&enc=utf-8'
        print(search_url)
        time.sleep(2)  #写入操作费时太快易报错
        save_data(search_url)







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium JD爬虫 的相关文章

随机推荐

  • tensorflow中使用Adam出现name ‘Adam‘ is not defined【转】

    转自Colab中使用Adam出现name Adam is not defined 错误场景 在本地运行正常 xff0c 之前在tensorflow上运行也正常 xff1b 之后重新运行colab上的代码 xff0c 出现如下错误 xff1a
  • Linux 安装 miniconda

    1 安装miniconda 1 百度输入miniconda 找到miniconda 如下图第一个链接 2 找到linux版本的miniconda 此处我要安装Python3 7版本的Linux下的miniconda 3 复制下载链接 如下
  • Linux将一个文件夹或文件夹下的所有内容复制或移动到另一个文件夹

    1 将一个文件夹下的所有内容复制到另一个文件夹下 cp r home packageA home cp packageB 或 cp r home packageA home cp packageB 这两种方法效果是一样的 方法示例 xff1
  • 算法网址

    九章算法 xff1a https www jiuzhang com Lintcode xff1a https www lintcode com Leetcode xff1a https leetcode com CodeTop xff1a
  • Datawhale跟李沐大神合作举办 (动手学深度学习) !

    三月的组队学习跟李沐大神合作举办 动手学深度学习 xff0c 欢迎感兴趣的小伙伴报名学习 xff0c 另外 xff0c 欢迎志同道合的小伙伴了解 加入Datawhale 跟李沐导师 xff1a 动手学深度学习 xff01 动手学深度学习 P
  • 期刊会议名缩写查询-1

    投往IEEE transactions的论文 xff0c 其中的参考文献格式都是采用会议期刊的缩写 本博客特此记录如何查询期刊和会议名的缩写问题 期刊名缩写 SCI论文的参考文献很多期刊名都是缩写 xff0c 如下图所示 在写论文时 xff
  • Linux从用户层到内核层系列 - GNU系列之你所不知道的printf

    题记 xff1a 本系列文章的目的是抛开书本从源代码和使用的角度分析Linux内核和相关源代码 xff0c byhankswang和你一起玩转linux开发 轻松搞定TCP IP协议栈 xff0c 原创文章欢迎交流 byhankswang
  • 第十一届蓝桥杯python组第二场省赛-排序

    1 问题描述 xff1a 小蓝最近学习了一些排序算法 xff0c 其中冒泡排序让他印象深刻 在冒泡排序中 xff0c 每次只能交换相邻的两个元素 小蓝发现 xff0c 如果对一个字符串中的字符排序 xff0c 只允许交换相邻的两个字符 xf
  • 4306 序列处理(贪心)

    1 问题描述 xff1a 给定一个长度为 n 的整数序列 a1 xff0c a2 xff0c xff0c an 我们可以对该序列进行修改操作 xff0c 每次操作选中其中一个元素 xff0c 并使其增加 1 现在 xff0c 请你计算要使得
  • python数据分析基础-datafrom基础属性

    linux 43 pycharm 43 anaconda span class token keyword import span pandas span class token keyword as span pd data1 span
  • python数据分析基础-series基本统计运算,数据运算和比较运算

    linux 43 pycharm 43 anaconda 96 span class token comment 两个series数据运算 43 span num span class token operator 61 span pd s
  • python数据分析-柱状图绘制及常用参数设置

    linux 43 pycharm 43 anaconda span class token comment 柱形图绘制与参数设置 span span class token comment plt bar x height width bo
  • 爬取西窗烛app

    本文旨在学习 xff0c 不可做商业用途 span class token keyword import span csv span class token keyword import span json span class token
  • 爬取百度地图店家信息

    本文旨在交流学习 xff0c 勿作他用 xff0c 否则后果自负 span class token keyword import span json span class token keyword import span csv span
  • 爬取蝉妈妈数据平台商品数据

    本文旨在交流学习 xff0c 勿作他用 xff0c 否则后果自负 环境 linux 43 pycharm 43 anaconda span class token keyword import span json span class to
  • selenium+webdriver+chrome实现百度以图搜图

    1 环境搭建 1 webdriver 43 chrome的版本需匹配 2 打开chrome 输入 chrome version 来查看chrome版本 访问此网站 谷歌浏览器驱动 然后选择合适版本webdriver 2 收集原始图片和构建图
  • 无聊之重学c/c++

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Python配置Pip国内源

    临时指定下载源 以阿里云的镜像为例 pip install trusted host https mirrors aliyun com i https mirrors aliyun com pypi simple lt some packa
  • 爬虫效率提升方法

    协程 xff1a 在函数 特殊函数 定义的时候 使用async修饰 函数调用后 内部语句不会立即执行 而是会返回一个协程对象 任务对象 xff1a 任务对象 61 高级的协程对象 进一步封装 61 特殊的函数 xff0c 任务对象必须要注册
  • selenium JD爬虫

    python3 7 43 win10 span class token comment coding utf 8 span span class token comment 64 Time 2022 6 27 16 55 span span