在本文中,我们将深入探讨如何使用Python爬虫来实现从京东手机页面抓取图片的功能。我们需要了解Python爬虫的基本概念,它是通过自动化脚本模拟浏览器请求网页并解析网页内容的一种技术。在这个实例中,我们将使用requests库来发送HTTP请求,BeautifulSoup库来解析HTML文档,以及urllib库中的urlretrieve函数来下载图片。
导入所需的库:
```python
import requests
from bs4 import BeautifulSoup
import os
from urllib.request import urlretrieve
```
接着,定义一个名为Picture的类,它包含一些方法来处理整个爬虫过程。初始化方法`__init__`中设置请求头(headers),基础URL(base_url)表示京东手机页面的链接,以及基础路径(base_path)用于保存下载的图片。
```python
class Picture():
def __init__(self):
self.headers = {'User-Agent': '...'}
self.base_url = 'https://list.jd.com/list.html?cat=9987,653,655&page='
self.base_path = os.path.dirname(__file__)
```
`makedir`方法用于创建一个目录来保存图片,如果目录已存在,则不创建。
```python
def makedir(self, name):
path = os.path.join(self.base_path, name)
isExist = os.path.exists(path)
if not isExist:
os.makedirs(path)
print("File has been created.")
else:
print('OK!The file is existed. You do not need create a new one.')
os.chdir(path)
```
`request`方法发送GET请求到指定URL,并返回响应对象。
```python
def request(self, url):
r = requests.get(url, headers=self.headers)
return r
```
`get_img`方法是核心部分,它接收页面参数,发送请求获取该页面的HTML,然后找到商品列表('plist'),遍历每个商品条目('gl-item'),提取图片URL并下载。
```python
def get_img(self, page):
r = self.request(self.base_url + str(page))
plist = BeautifulSoup(r.text, 'lxml').find('div', id='plist')
item = plist.find_all('li', class_='gl-item')
print(len(item))
self.makedir('pictures')
num = 0
for i in item:
num += 1
imglist = i.find('div', class_='p-img')
print(num)
img = imglist.find('img')
print('This is %s picture' %num)
if img.get('src'):
url = 'https:' + img.get('src')
fileName = img.get('src').split('/')[-1]
urlretrieve(url, filename=fileName)
elif img.get('data-lazy-img'):
url = 'https:' + img.get('data-lazy-img')
fileName = img.get('data-lazy-img').split('/')[-1]
urlretrieve(url, filename=fileName)
```
在主程序中创建Picture类的实例并调用`get_img`方法,传入需要爬取的页面号。
```python
if __name__ == '__main__':
picture = Picture()
for i in range(2): # 控制爬取的页数
picture.get_img(i+1)
```
这个实例展示了如何使用Python爬虫抓取京东手机页面的商品图片。需要注意的是,实际操作时可能会遇到反爬策略,如验证码、IP限制等,此时需要添加相应的处理机制,如使用代理IP、设置延时等。同时,爬虫应遵守网站的robots.txt规则,尊重网站的版权和用户隐私。在进行网络爬虫活动时,确保合法合规是非常重要的。