吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3567|回复: 38
收起左侧

[Python 原创] 【爬虫】利用selenium爬取淘宝主页商品图和商品信息

  [复制链接]
Murphy16666 发表于 2023-11-16 18:52
本帖最后由 Murphy16666 于 2023-11-16 18:54 编辑

利用selenium爬取淘宝主页商品图、商品信息和商品价格

前言

  在某些需求下,我们可能需要爬取一些商品信息作为我们程序的启动数据。那么大网站的主页肯定是我们首选,数据可靠性强,完整性很好。那么怎么解析获取数据呢,大家可能会想到用requests发送请求获取数据,用BeautifulSoup去解析,然而淘宝如此庞大的数据量怎么可能使用静态页面渲染呢。很显然,请求下来的结果大失所望,啥也没有,就一个空壳。
  我想试试使用Selenium让页面滚动到底部,使得淘宝页面动态渲染完毕,再通过Selenium的find_element获取元素的数据。最后用requests请求图片并保存。
  结果十分良好,代码不长,欢迎有需求的朋友拿去使用!


    记得给我评分增加热心值哦!!!

环境准备

  • Selenium 4.4.1
  • requests 2.31.0
  • chrome
  • chromedriver   (与chrome同版本)

抓取的图片存放到脚本同目录taobao_img下,数据存放到taobao.csv下

以下为代码实现:

import re
import os
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

url = 'https://www.taobao.com/'
header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) \
        AppleWebKit/537.36 (KHTML, like Gecko) \
        Chrome/35.0.1916.114 Safari/537.36'}
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:12306")
service_ = Service(executable_path=r'I:\chromedriver_win64\chromedriver.exe',port=0)
driver = webdriver.Chrome(service=service_)
driver.get(url)
driver.maximize_window()

def get_content(i):
    img = driver.find_element(by='xpath',
                              value='/html/body/div[6]/div/div/div/div/div[%d]/a/div[1]/img' % i).get_attribute(
        'src')
    img_response = requests.get(img,headers=header)
    img_name = "%d.jpg" % i
                # 判断taobao_img文件夹是否存在
    if ~os.path.exists('taobao_img'):
        os.mkdir('taobao_img')
    with open('taobao_img/' + img_name, mode='wb') as f:
        f.write(img_response.content)
    f.close()
    g = open('taobao.csv', mode='a', encoding='utf-8')
    title = driver.find_element(by='xpath',
                                value='/html/body/div[6]/div/div/div/div/div[%d]/a/div[2]/div' % i).get_attribute(
        'innerHTML')
    title = title.replace(
        '<img src="//img.alicdn.com/imgextra/i1/O1CN01rHZjwm1kc1MDCvBIO_!!6000000004703-2-tps-38-20.png">','')
    g.write(title)
    price = driver.find_element(by='xpath',
                                value='/html/body/div[6]/div/div/div/div/div[%d]/a/div[3]' % i).get_attribute(
        'innerHTML')
    price = price.strip()

    if re.match('<span class="price-value"><em>¥</em>', price):
        price = price.strip('<span class="price-value"><em>¥</em>')
        price = price.replace("</span>", "")
        g.write(',' + price + '\n')
        g.close()

print("----程序至少运行60秒,请耐心等待------")

# 滚动使页面加载完成
for i in range(2000):
    driver.execute_script('scrollTo(0,%d)' % (i * 10))

open('taobao.csv', mode='w', encoding='utf-8')
for i in range(1, 300):  # 300为最大数,不可更大
    get_content(i)

print('运行结束')

免费评分

参与人数 11吾爱币 +15 热心值 +11 收起 理由
chongciyibai + 1 + 1 热心回复!
Marythore + 1 + 1 支持!
NTMD + 1 + 1 用心讨论,共获提升!
jjf7978 + 1 + 1 谢谢@Thanks!
menoooooos + 1 + 1 我很赞同!
jsnchen + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ARKyuyan + 1 + 1 用心讨论,共获提升!
Tonyha7 + 1 + 1 用心讨论,共获提升!
Ashton + 1 用心讨论,共获提升!
inflowin + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Fargolee 发表于 2023-11-28 18:44
if ~os.path.exists('taobao_img'):
        os.mkdir('taobao_img')
~ 什么意思,可以用not吗
Ashton 发表于 2023-11-16 21:33
kangfukang666 发表于 2023-11-16 22:06
777444 发表于 2023-11-16 22:24
支持支持支持
AnonHedgehog 发表于 2023-11-16 22:51
没有碰到反扒么?
ARKyuyan 发表于 2023-11-16 23:08
厉害的,学习一下
 楼主| Murphy16666 发表于 2023-11-16 23:38

图片请求不加UA下载会失败,其他都ok
RealTheShy 发表于 2023-11-17 08:14
学习一下
lsbzc 发表于 2023-11-17 09:28
回去试试,
koy4134 发表于 2023-11-17 10:50
人生苦短,学习python!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 08:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表