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

一、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 requestsheaders = {'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 pathdef 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)    returndef 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 imagesdef 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.mzph.cn/news/667598.shtml

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

相关文章

大数据 - Spark系列《三》- 加载各种数据源创建RDD

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 目录 3.1🧀加载文件(本地) 1. 加载本地文件路径 🌮使用te…

Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

Redis核心技术与实战【学习笔记】 - 20.Redis原子操作及并发访问

概述 使用 Redis 时,不可避免地会遇到并发访问的问题,比如说如果多个用户同时下单,就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作,数据就会被修改,如果我们没有对并发写请求做好控制,就可…

MySQL-----DML基础操作

DML语句 DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...); 2.给全…

蓝桥杯---生日蜡烛

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛,现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的? 请填写他开始过生日 party的年龄数。 注意:你提交的应该是一个整数,不要…

区间时间检索

前端 <el-col :md"6" v-if"advanced"><el-form-item :label"$t(inRecord.column.createTime)"><el-date-pickerstyle"width: 100%;"v-model"daterangeCreateTime"value-format"yyyy-MM-dd"type&qu…

JavaScript鼠标拖放(Drag and Drop)

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 拖放是现代界面不可或缺的交互方式之一。本文将介绍如何用JavaScript…

界面组件DevExpress中文教程 - 如何使用UI本地化客户端工具本地化应用

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 获取DevExpress v23.2正式版下载(Q技术交流&#xff1a;909157416&#xff09; 在2023年12月…

django+flask网上购物商城系统的设计与实现python-vue

全球经济在快速的发展&#xff0c;中国更是进步飞速&#xff0c;这使得国内的互联网技术进入了发展的高峰时期&#xff0c;这让中外资本不断转向互联网这个大市场[3]。在这个信息高度发达的现在&#xff0c;利用网络进行信息管理改革已经成为了人们追捧的一种趋势。“网上购物系…

华西建筑智能化团队助力建筑行业转型升级

华西建筑智能化团队全力推进建筑数字化转行。华西建筑智能化团队作为专业的机电安装及弱电智能化项目施工管理团队&#xff0c;先后实施了多个大型机电、智能化工程项目&#xff0c;包括&#xff1a;智慧医院项目、智能楼宇项目、机场/体育场馆/展馆等大型公共建筑及科研单位园…

sqli-labs-master靶场训练笔记(21-38|精英级)

2024.1.30 level-21 (cookie 注入数据加密) 从页面上就可以看出这次的数据被 baes64 加密了 中国有句古话&#xff1a;师夷长技以制夷 &#xff0c;用base64加密后的数据即可爆出数据 加密前&#xff1a; admin and updatexml(1,concat(~,(select database()),~),1) and …

搜索专项---Flood Fill

文章目录 池塘计数城堡问题山峰与山谷 一、池塘计数OJ链接 1.BFS做法 #include <bits/stdc.h>#define x first #define y secondtypedef std::pair<int,int> PII;constexpr int N1010;int n,m; char g[N][N]; bool st[N][N];//用来表示已经记录过的 std::queue&…

javaEE - 21( 15000字 Tomcat 和 HTTP 协议入门 -2)

一&#xff1a; HTTP 响应 1.1 认识 “状态码” (status code) 状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)&#xff0c;以下为常见的状态码. 1.1.1 200 OK 这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200 HTTP/…

Unity引擎学习笔记之【混合动画操作】

混合动画Hybrid Animation Unity中的Blend Tree是一种动画混合技术&#xff0c;它允许开发者通过添加多个动画片段&#xff08;例如奔跑、行走、跳跃等&#xff09;来创建复杂的角色动画。Blend Tree允许在不同的状态下平滑地过渡并混合不同的动画。例如&#xff0c;在奔跑和行…

目标检测:2如何生成自己的数据集

目录 1. 数据采集 2. 图像标注 3. 开源已标记数据集 4. 数据集划分 参考&#xff1a; 1. 数据采集 数据采集是深度学习和人工智能任务中至关重要的一步&#xff0c;它为模型提供了必要的训练样本和测试数据。在实际应用中&#xff0c;数据采集的方法多种多样&#xff0c;每…

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分&#xff0c;属于理论章节。如果你比较着急可以跳过。但作者不建议跳过&#xff0c;因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架&#xff0c;所以它必须是一个可以部署在多台计算机上…

Multisim14.0仿真(五十)基于CD4518的计数器设计

一、CD4518简介: CD4518是二、十进制(8421编码)同步加计数器,内含两个单元的加计数器。每单个单元有两个时钟输入端CLK和EN,可用时钟脉冲的上升沿或下降沿触发。可知,若用ENABLE信号下降沿触发,触发信号由EN端输入,CLK端置“0”;若用CL℃K信号上升沿触发,触发信号由C…

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例&#xff1a;社交媒体数据分析1.1.3 拓展案例1&#xff1a;电商网站价格监控1.1.4 拓展案例2&#xff1a;新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例&#xff1a;股票市场数据采…

生物素 PEG4 甲基四嗪,Biotin-PEG4-methyltetrazine,用于标记、追踪和分离特定的分子或细胞

生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪&#xff0c;Biotin-PEG4-methyltetrazine&#xff0c;用于标记、追踪和分离特定的分子或细胞 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪…

2024三掌柜赠书活动第八期:Web3与DAO:下一代互联网演进逻辑

目录 前言关于Web3和DAO关于《Web3与DAO&#xff1a;下一代互联网演进逻辑》编辑推荐内容简介作者简介精彩书评图书目录书中前言/序言《Web3与DAO&#xff1a;下一代互联网演进逻辑》全书速览结束语 前言 随着区块链技术的崛起&#xff0c;Web3和DAO成为了当前互联网领域炙手…