爬取京东商品图片的Python实现方法

server/2024/9/24 13:17:01/

引言

在数据驱动的商业环境中,网络爬虫技术已成为获取信息的重要手段。京东作为中国领先的电商平台,拥有海量的商品信息和图片资源。本文将详细介绍如何使用Python编写爬虫程序,爬取京东商品的图片,并提供完整的代码实现过程。

爬虫基础

在开始编写爬虫之前,需要了解一些基本的网络爬虫概念:

  • HTTP请求爬虫通过发送HTTP请求获取网页数据。
  • HTML解析:解析返回的HTML文档,提取所需信息。
  • 会话管理:使用Session保持登录状态和Cookies。

环境准备

  • Python:编程语言。
  • Requests:发送HTTP请求。
  • BeautifulSoup:解析HTML文档。
  • Lxml:解析库,BeautifulSoup的后端解析器。

安装所需库:

pip install requests beautifulsoup4 lxml

爬虫实现步骤

1. 设置请求头和代理

为了避免被识别为爬虫,需要设置User-Agent和代理IP。

import requests
from bs4 import BeautifulSoup# 代理服务器配置
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 构建包含代理服务器认证信息的代理URL
proxy_url = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"# 请求头,包含User-Agent
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}# 使用代理的requests会话
session = requests.Session()
session.headers.update(headers)# 配置代理,支持HTTP和HTTPS
session.proxies = {'http': proxy_url,'https': proxy_url
}# 示例使用会话对象发送请求
def get_page(url):try:response = session.get(url)response.raise_for_status()  # 检查请求是否成功return response.textexcept requests.exceptions.HTTPError as errh:print(f'HTTP Error: {errh}')except requests.exceptions.ConnectionError as errc:print(f'Error Connecting: {errc}')except requests.exceptions.Timeout as errt:print(f'Timeout Error: {errt}')except requests.exceptions.RequestException as err:print(f'OOps: Something Else: {err}')# 使用get_page函数获取网页内容
# html_content = get_page('http://example.com')

2. 发送请求

使用Requests库发送GET请求。

def get_page(url):response = requests.get(url, headers=headers)return response.text

3. 解析HTML

使用BeautifulSoup解析HTML,提取商品图片链接。

def parse_page(html):soup = BeautifulSoup(html, 'lxml')img_tags = soup.find_all('img')img_urls = [img.get('data-src') for img in img_tags if 'data-src' in img.attrs]return img_urls

4. 保存图片

下载并保存图片到本地。

def save_images(img_urls, folder='images'):for i, url in enumerate(img_urls):try:response = requests.get(url, stream=True)if response.status_code == 200:with open(f'{folder}/img_{i}.jpg', 'wb') as f:for chunk in response.iter_content(1024):f.write(chunk)else:print(f'Failed to download image: {url}')except Exception as e:print(f'Error occurred while downloading image {url}: {e}')

5. 主函数

整合以上步骤,实现爬取京东商品图片的功能。

def crawl_jd(keyword):search_url = f'https://search.jd.com/Search?keyword={keyword}&enc=utf-8'html = get_page(search_url)img_urls = parse_page(html)save_images(img_urls)if __name__ == '__main__':crawl_jd('笔记本电脑')

注意事项

  • 遵守robots.txt:在爬取前,检查目标网站的robots.txt文件,确保爬虫行为符合规定。
  • 请求频率控制:避免过快发送请求,以免给服务器造成负担。
  • 异常处理:代码中应包含异常处理逻辑,确保程序稳定运行。

http://www.ppmy.cn/server/48399.html

相关文章

一些简单却精妙的算法

文章目录 1.树状数组2.红黑树3.星星打分4.欧几里得算法5.快速幂6.并查集 在编程的世界里,简洁的代码往往隐藏着深邃的智慧。一起来看看那些看似简单,实则精妙绝伦的代码片段,体会编程语言的优雅与力量。 1.树状数组 int lowbit(int x) { …

Codeforces Round 952 (Div. 4)(A~E题解)

这次比较遗憾的就是第五个,本来直接计算就过了,结果存到一个数组里面一直都在超时,导致这次第五题都没做出来,确实小丑了 话不多说直接看题 A. Creating Words 题解:这题就直接交换一下就OK,没有别的事。…

【MySQL】索引

https://www.wolai.com/curry00/fzTPy3kSsMDEgEcdvo4G5w https://www.bilibili.com/video/BV1Kr4y1i7ru/?p69 https://jimhackking.github.io/%E8%BF%90%E7%BB%B4/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#%E7%B4%A2%E5%BC%95 索引是一种用于快速查询和检索数据的数据结构…

数组中的map方法

JavaScript中的map()方法详解 map()方法经常拿来遍历数组,但是不改变原数组,但是会返回一个新的数组,并且这个新的数组不会改变原数组的长度 注意:有时候会出现这种现象,出现几个undefined const array [1, 4,9, 16…

Windos10上Podman安装运行mysql8

记录以下在windows10系统上Podman v5.1.1安装MySQL8全过程。 目录 一、拉取mysql8镜像二、创建宿主目录三、创建 my.cnf文件四、创建Mysql8容器五、windows上Podman安装运行mysql8失败问题描述 解决办法① 通过PowerShell进入wsl② 修改wsl系统配置③ 重启wsl,Podma…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好,已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题: 解决: sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目:直接给他注释掉就行了。

NOSQL -- ES

第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…

图论方法学习

图论方法 考过的点 2024年省赛考察:最小生成树2023年国赛考察:分层图( 01 B F S 01BFS 01BFS双端队列)2022年国赛考察:Floyd算法 2024国赛准备 重点掌握 D i j k s t r a Dijkstra Dijkstra、 S P F A SPFA SPFA、 …