Python网络爬虫(6)--爬取淘宝模特图片

经过前面的一些基础学习,我们大致知道了如何爬取并解析一个网页中的信息,这里我们来做一个更有意思的事情,爬取MM图片并保存。网址为https://mm.taobao.com/json/request_top_list.htm。这个网址有很多页,通过在网址后添加?page=页码来进入指定的页。

为了爬取模特的图片,我们首先要找到各个模特自己的页面。通过查看网页源码,我们可以发现,模特各自的页面的特点如下:

我们可以通过查找class属性为lady-name的标签,然后取其href属性来获取各个模特各自的页面地址。

1 html = urlopen(url)
2 bs = BeautifulSoup(html.read().decode(‘gbk‘),"html.parser")
3 girls = bs.findAll("a",{"class":"lady-name"})
4 for item in girls:
5     linkurl = item.get(‘href‘)

继续分析模特各自的页面的特点,模特页面打开后的页面布局如下:

在这个页面中我们要提取的是模特的个性域名,这个域名打开后,里面就有模特的图片了。那么我们的关键问题就是如何提取这个域名。按我们之前的学习,我们会去查找这个标签,但是我们打开网页源码会发现网页源码里面并没有包含这个信息。这是因为这一部分的信息是用JS动态生成的。那么这种情况下我们怎么办呢?

答案是使用selenium和PhantomJS,相关的概念可以自行百度。简而言之,PhantomJS是一个无界面的浏览器,而selenium是一个测试浏览器的工具,结合这2者,我们就可以解析动态的页面了。

获取模特的个性域名的代码如下:

 1 def getUrls(url):
 2     driver= webdriver.PhantomJS()
 3     html = urlopen(url)
 4     bs = BeautifulSoup(html.read().decode(‘gbk‘),"html.parser")
 5     girls = bs.findAll("a",{"class":"lady-name"})
 6     namewithurl = {}
 7     for item in girls:
 8         linkurl = item.get(‘href‘)
 9         driver.get("https:"+linkurl)
10         bs1 = BeautifulSoup(driver.page_source,"html.parser")
11         links = bs1.find("div",{"class":"mm-p-info mm-p-domain-info"})
12         if links is not None:
13             links = links.li.span.get_text()
14             namewithurl[item.get_text()] = links
15             print(links)
16     return namewithurl

在这里,我们使用PhantomJs去加载动态的页面,然后用BeautifulSoup去规则化加载后的页面,接下来的工作就与普通的网页相同了。

接下来分析模特的个人主页的特点,直观上是这样的页面:

分析源码后我们会发现,模特的图片地址可以这样获取:

1 html = urlopen(personurl)
2 bs = BeautifulSoup(html.read().decode(‘gbk‘),"html.parser")
3 contents = bs.find("div",{"class":"mm-aixiu-content"})
4 imgs = contents.findAll("img",{"src":re.compile(r‘//img\.alicdn\.com/.*\.jpg‘)})

如此我们就能获取模特的个人域名地址中的图片了,接下来的问题就是如何保存图片了。

我们可以用urllib中的urlretrieve函数来完成保存的工作。

用法为urlretrieve(imgurl, savepath)

再加入多线程等代码,完整的爬虫代码为:

 1 #coding = utf-8
 2 from urllib.request import urlopen
 3 from urllib.request import urlretrieve
 4 from urllib.error import HTTPError
 5 from selenium import webdriver
 6 from selenium.webdriver.common.by import By
 7 from bs4 import BeautifulSoup
 8 from multiprocessing.dummy import Pool as ThreadPool
 9 import sys,os
10 import re
11
12 savepath=r".\save"
13
14 def mkdir(path):
15     if os.path.exists(path):
16         return
17     os.mkdir(path)
18
19 def getUrls(url):
20     driver= webdriver.PhantomJS()
21     html = urlopen(url)
22     bs = BeautifulSoup(html.read().decode(‘gbk‘),"html.parser")
23     girls = bs.findAll("a",{"class":"lady-name"})
24     namewithurl = {}
25     for item in girls:
26         linkurl = item.get(‘href‘)
27         driver.get("https:"+linkurl)
28         bs1 = BeautifulSoup(driver.page_source,"html.parser")
29         links = bs1.find("div",{"class":"mm-p-info mm-p-domain-info"})
30         if links is not None:
31             links = links.li.span.get_text()
32             namewithurl[item.get_text()] = links
33             print(links)
34     return namewithurl
35
36 def getImgs(parms):
37     personname = parms[0]
38     personurl = "https:"+parms[1]
39     html = urlopen(personurl)
40     bs = BeautifulSoup(html.read().decode(‘gbk‘),"html.parser")
41     contents = bs.find("div",{"class":"mm-aixiu-content"})
42     imgs = contents.findAll("img",{"src":re.compile(r‘//img\.alicdn\.com/.*\.jpg‘)})
43     savefilename = os.path.join(savepath,personname)
44     mkdir(savefilename)
45     print("img num :",len(imgs))
46     cnt = 0
47     for img in imgs:
48         try:
49             urlretrieve(url = "https:"+img.get("src"),filename =os.path.join(savefilename,str(cnt)+".jpg"))
50             cnt+=1
51         except HTTPError as e:
52             continue
53
54 if __name__ == "__main__":
55     mkdir(savepath)
56     pagenum = 10
57     for i in range(1,pagenum):
58         urls = getUrls("https://mm.taobao.com/json/request_top_list.htm"+"?page="+str(i))
59         pool = ThreadPool(4)
60         pool.map(getImgs,urls.items())
61         pool.close()
62         pool.join()
63         # for (k,v) in urls.items():
64         #     getImgs((k,v))

代码下载地址:

https://github.com/HaoLiuHust/Spider

运行结果如下:

时间: 2024-10-04 13:41:44

Python网络爬虫(6)--爬取淘宝模特图片的相关文章

python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片

本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三比一的工科院校--写代码之余看看美女也是极好的放松方式.但一张一张点右键–另存为又显得太过麻烦而且不切实际,毕竟图片太多了.于是,我开始考虑用万能的python来解决问题. 我们先看看淘女郎页面的URL,https://mm.taobao.com/json/request_top_list.htm?

python 爬取淘宝模特信息

通过本篇博文,介绍一下我对指定信息进行爬取的时候的思路,顺便贴一下代码. 一.首先获取想要爬取的网站的url链接的规则变化 可以看出来该网站页面的url结构简单,变化的只是https://mm.taobao.com/json/request_top_list.htm?page= page的值 二.对网站页面的DOM树的结构进行分析,方便我们获取我们想要的内容信息, 我写了个简单的网页分析脚本analyze.py:用来输出DOM树,方便我后面做筛选. # -*- coding:utf-8 -*-

Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索

python编译练习,为了将自己学习过的知识用上,自己找了很多资料.所以想做一个简单的爬虫,代码不会超过60行.主要用于爬取的古诗文网站没有什么限制而且网页排布很规律,没有什么特别的东西,适合入门级别的爬虫. 抓取目标站点的准备工作 Python的版本是:3.4.3. 爬取的目标是: 古诗文网(www.xzslx.net) 随意打开一个古诗文网的古诗页面,查看它的网页地址就能看到,古诗的地址基本是 "www.xzslx.net/shi/+ id + .html" 构成,如下图: 然后对

python网络爬虫《爬取get请求的页面数据》

一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在python3中的为urllib.request和urllib.parse,在python2中是urllib和urllib2. 二.由易到难的爬虫程序: 1.爬取百度首页所有数据值 #!/usr/bin/env python # -*- coding:utf-8 -*- #导包 import urllib.request import urllib.parse

Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页

1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面. 几个常见的用到ajax的场景. 比如你在逛知乎,你没有刷新过网页,但是你却能看到你关注的用户或者话题有了新动态的消息提示. 还比如,我们在看视频时,可以看到下面

java的简单网络爬虫(爬取花瓣网的图片)

因为本人对爬虫比较感兴趣,加上之前也写过一些简单的python爬虫,所以在学完java基础后写了一个简单的网络图片爬虫.废话不多说直接上过程代码.(爬取的图源来自花瓣网:https://huaban.com/boards/favorite/beauty/) 源url页面分析 拿到爬取的源url,首先是分析页面哪些东西是要爬取的,这个页面是美女分类的画板页面,这里我们要爬的就是要爬取某个画板下面的所有图片.这里为了简单爬取我就选取了该页面推荐的几个画板.查看本页面源码可以很快找到推荐画板的url资

python3爬取淘宝美食

环境:ubuntu16.04python3.5python库: selenium, pyquery,pymongo, re 要求:设置×××面浏览器访问,并将商品列表存入mongoDB数据库. 分析流程: #!/usr/bin/env python # -*- coding:utf-8 -*- """ 1.爬取淘宝美食的流程 - 搜索关键字: 用selenium打开浏览器,模拟输入关键字,并搜索对应的商品列表. - 分析页码并翻页,模拟翻页,查看到所有页面的商品列表. - 分

利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. 不同关键词word对应的sales的统计分析 3. 商品的价格分布情况分析 4. 商品的销量分布情况分析 5. 不同价格区间的商品的平均销量分布 6. 商品价格对销量的影响分析 7. 商品价格对销售额的影响分析 8. 不同省份或城市的商品数量分布 9.不同省份的商品平均销量分布 注:本项目仅以以上几项分析为

python基础项目实战:selenium控制浏览器爬取淘宝商品信息

今天为大家介绍一个Python利用selenium打开浏览器的方式来爬取淘宝商品的信息,下面就来看看,关于selenium的知识点,是如何做到控制浏览器获取网站的信息 导入第三方库 关键词搜索 抓取索引页 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发.爬虫.django.数据挖掘等,零基础到项目实