python爬虫代码示例:爬取京东详情页图片【京东API接口】

news2024/11/27 22:35:40

一、Requests请求示例【京东API接口】

爬虫爬取网页内容首先要获取网页的内容,通过requests库进行获取。

 

安装

pip install requests

示例代码

import requests
url  = "http://store.weigou365.cn"res = requests.get(url)res.text

执行效果如下:

图片

二、Selenium库

爬虫爬取网页有时需要模拟网页行为,比如京东、淘宝详情页面,图片加载随着滚动自动加载的。这种情况我们就要进行浏览器模拟操作才能获取要爬取的数据。

Selenium 是一个用于自动化浏览器操作的开源框架,主要用于网页测试,支持多种浏览器包括 Chrome、Firefox、Safari 等。它提供了一系列的API,允许你模拟用户在浏览器中的行为,例如点击按钮、填写表单、导航等。

官方网站: https://sites.google.com/a/chromium.org/chromedriver114之前版本:http://chromedriver.storage.googleapis.com/index.html116版本:https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/win64/chromedriver-win64.zip117之后的版本:https://googlechromelabs.github.io/chrome-for-testing/

安装

pip install selenium

示例代码

from selenium import webdriverbrowser = webdriver.Chrome()browser.get("https://baidu.com/")print(browser.title)browser.quit() 

、爬取京东详情页面代码

from selenium import webdriverfrom lxml import etreeimport timeimport openpyxlimport reimport osimport requests

headers = {'content-type': 'application/json', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}

def exchange_url(small,big,flag=0):    lists = small[0].strip('/').split('/')    return lists[0] + "/n" + str(flag) + "/" + big[0]

def get_image_path(model=""):    path = "./imgs/" +  str(time.strftime("%Y%m%d%H%M", time.localtime()) ) + "/"    if model != "":        path += model            if(os.path.exists(path)):        pass    else:        os.makedirs(path)    return path

def download_img(title,url,headers,model=""):    img_data = requests.get(url,headers=headers).content        filename = url.strip('/').split('/').pop()    if model != "":        filename = model + "_" + filename
    img_path = os.path.join(get_image_path(model),filename)    with open(img_path,'wb') as f:            f.write(img_data)    return

def get_source(driver,url):  #发起请求    driver.get(url)    time.sleep(1)   #休息一秒然后操纵滚轮滑到最底部,这时浏览器数据全部加载,返回的源码中是全部数据    driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")    time.sleep(2)    #得到代码    source = driver.page_source
    #返回source源码以供解析    return source
def writeExcel(title):    wb = openpyxl.load_workbook("records.xlsx")    ws = wb.active    path = get_image_path()    path = os.path.abspath('.') + path.strip('.')    ws.append([title,path])    wb.save("records.xlsx")
    def get_page_title(html):    db_title = html.xpath('//*[@class="itemInfo-wrap"]/div[@class="sku-name"]/text()')    if(len(db_title) == 1):        return db_title[0].replace("\n","").replace('\'',"").replace(" ","")            return db_title[1].replace("\n","").replace('\'',"").replace(" ","")

def get_page_logos(html):    db_logo_items = html.xpath('//*[@id="spec-list"]/ul[@class="lh"]/li')        bigs = mids = []    for db_logo_item in db_logo_items:        db_logo_small = db_logo_item.xpath("img/@src")        db_logo_big = db_logo_item.xpath("img/@data-url")        bigs.append(exchange_url(db_logo_small,db_logo_big))        mids.append(exchange_url(db_logo_small,db_logo_big,1))        return [mids,bigs]        
def get_page_content(html):    images = html.xpath('//div[@id="J-detail-content"]/p/img/@href')    #pattern = re.compile(r"background-image:url\(([^)]*)",re.S)    return images

def process(url):    try:        driver = webdriver.Chrome()        driver.implicitly_wait(10)        content = get_source(driver,url)        html = etree.HTML(content)        title = get_page_title(html)        logos = get_page_logos(html)        images = get_page_content(html)            print(title,logos,images)
        #记录标题和图片地址        writeExcel(title)        print("write title done!")
        #下载中图        for mid_url in logos[0]:            img_url = "http://" + mid_url.replace("http","").replace(":","").replace("//","")            download_img(title,img_url,headers,model="mid")        print("download mid logos done!")
        #下载大图        for big_url in logos[1]:            img_url  = "http://" + big_url.replace("http","").replace(":","").replace("//","")            download_img(title,img_url,headers,model="big")
        print("download big logos done!")
        for img_url in images:            img_url = "http://" + img_url.replace("http","").replace(":","").replace("//","")            download_img(title,img_url,headers,model="imgs")
        print("download content images done!")
    finally:        driver.close()

if __name__ == "__main__":    while(True):        url = input('京东详情页地址(quit退出):')        if(url == "quit"):            break;                process(url)    

上面代码保存.py文件。通过下面命令执行

python scrawler.py

执行如下:

图片

下载图片如下:

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

08. 【Linux教程】CentOS 目录介绍

CentOS 目录介绍 前面小节介绍了如何安装并登录连接 CentOS 系统,本小节围绕 CentOS 系统的目录,介绍其各个目录的作用,方便读者以后在工作中很好地将项目和软件归类存储,熟悉 CentOS 系统各个目录的功能介绍,有助于加…

javaEE - 20( 18000字 Tomcat 和 HTTP 协议入门 -1)

一: HTTP 协议 1.1. HTTP 是什么 HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议. HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议. 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的产品已经支持了. HTT…

【JavaScript 漫游】【007】数据类型转换

文章简介 本文为【JavaScript 漫游】专栏的第 007 篇文章,对 JS 数据类型转化语法进行了简记。 数据类型的转换指的是将 JS 的某一数据类型的值转换为 JS 的某一原始数据类型的值,也就是 number、string 和 boolean。 Number 方法强制转换为 number 类…

Python||五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况(中)

目录 4.上海市空气质量月度差异 5.沈阳市空气质量月度差异 五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况 4.上海市空气质量月度差异 import numpy as np import pandas as pd import matplotlib.pyplot as plt#读入文件 sh pd.read_csv(./S…

arping交叉编译

arping命令依赖libpcap和libnet,需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件,从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

12. onnx转为rknn测试时有很多重叠框的修改(python)

我们下载rknn-toolkit2-master后并进行前面的处理后,进入到rknn-toolkit2-master\examples\onnx\yolov5文件夹,里面有个test.py文件,打开该文件,其代码如下: # -*- coding: utf-8 -*- # coding:utf-8import os import…

解决问题(Tensorflow框架):ImportError: cannot import name ‘merge‘ from ‘keras.layers‘

看了一圈解决方案,没有找到跟我这个相关的 这就是版本兼容性问题 说句最简单的,针对我这个问题 直接把merge删除点就完事了,因为新版的tensorflow框架这个里面不包含merge,所以直接删掉问题就解决了

SD-WAN的安全性体现在哪里?

SD-WAN技术以其高度灵活、网络自动配置和低成本等优势,将多个物理WAN链接整合为一个逻辑网络,推动网络从“连通驱动”向“服务驱动”导向的转变。同时,企业在追求高效网络时,SD-WAN的安全性也成为一个重要的考量因素。 SD-WAN采用…

快速掌握西门子S7-1200 PLC的PID控制工艺

模拟量闭环控制系统-PID控制的特点: 不需要被控对象的数学模型,结构简单容易实现,使用方便有较强的灵活性和适应性。 用调试窗口整定PID控制器-调试窗口的功能: 1、使用“首次启动自调节”功能优化控制器 2、使用“运行中自调节…

windows 搭建nginx http服务

下载 下面链接直接点击下载,下载的就是包含rtmp服务器相关功能的,只不过需要配置下 Index of /download/ (ecsds.eu) nginx 1.7.11.3 Gryphon.zip直接点击额下面的连接即可下载 http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip …

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题:下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示

深度学习(7)---Diffusion Model概念讲解

文章目录 一、基本概括1.1 概念讲解1.2 Denoise模块 二、Stable Diffusion2.1 概念讲解2.2 FID2.3 CLIP 一、基本概括 1.1 概念讲解 1. Diffusion Model是一种生成模型,通过连续添加高斯噪声来破坏训练数据,然后学习反转的去噪过程来恢复数据。它分为正…

算法学习——华为机考题库10(HJ64 - HJ67)

算法学习——华为机考题库10(HJ64 - HJ70) HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲&a…

代码随想录算法训练营第三十五天|343. 整数拆分 , 96.不同的二叉搜索树

343. 整数拆分 代码随想录 视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili class Solution {public int integerBreak(int n) {// 1.确定dp数组(dp table)以及下…

【git】本地项目推送到github、合并分支的使用

1. github上创建仓库信息 点击个人头像,选择【你的仓库】 点击【新增】 填写仓库信息 2. 本地项目执行的操作 1.生成本地的git管理 (会生成一个.git的文件夹) git init 2.正常提交到暂存区,并填写提交消息 git add . git commit -m "init…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

Python算法题集_搜索二维矩阵II

Python算法题集_搜索二维矩阵II 题41:搜索二维矩阵II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【行尾检测】3) 改进版二【对角线划分】 4. 最优算法 本文为Python算法题集之一的代码示例 题41&#xf…

Oracle 面试题 | 12.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

国辰智企APS自动化排产平台:实现生产计划与其他系统无缝协同

在当今竞争激烈的制造环境中,有效的生产计划和排程对于企业的成功至关重要。APS生产计划排程平台作为一种先进的工具,正越来越受到企业的关注和应用。那么,APS生产计划排程平台有哪些类型呢?本文将为您详细介绍。 1.基于规则的APS…

Java学习-内部类

内部类概述 1.成员内部类 注意: 2.静态内部类 3.局部内部类(看看就行) 4.匿名内部类 应用场景:通常作为一个参数传给方法 Eg.小猫和小狗都参加游泳比赛