爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)
环境
操作系统:CentOS 6.7 32-bit
Python版本:2.6.6
第三方插件
selenium
PhantomJS
BeautifulSoup
代码
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
'''
作者:昨夜星辰
'''
import re
import os
import time
import shutil
import requests
import subprocess
from bs4 import BeautifulSoup
from selenium import webdriver # 拼接url
def joint_url(string):
return 'https:' + string # 判断文件夹是否存在,如果存在就删除,否则就创建。
def create_folder(path):
if os.path.exists(path):
if os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)
os.mkdir(path) root_folder = '淘女郎'
create_folder(root_folder)
url = 'https://mm.taobao.com/json/request_top_list.htm?page=1'
browser = webdriver.PhantomJS()
browser.get(url)
bs = BeautifulSoup(browser.page_source, 'lxml')
for top in bs('p', 'top'):
mm_url = joint_url(top.find('a')['href'])
mm_name = top.find('a').text
mm_age = top.find('em').text
mm_city = top.find('span').text
mm_folder = '%s/%s' % (root_folder, mm_name)
create_folder(mm_folder)
print '发现一位美眉,她叫做%s,今年%s,住在%s,现在开始爬取她的个人页面……' % (mm_name, mm_age, mm_city)
browser.get(mm_url)
bs1 = BeautifulSoup(browser.page_source, 'lxml')
base_info = bs1.find('ul', 'mm-p-info-cell clearfix')
info_list = base_info('span')
result = []
result.append('昵称:' + info_list[0].text)
result.append('生日:' + info_list[1].text.strip())
result.append('所在城市:' + info_list[2].text)
result.append('职业:' + info_list[3].text)
result.append('血型:' + info_list[4].text)
result.append('学校/专业:' + info_list[5].text)
result.append('风格:' + info_list[6].text)
result.append('身高:' + base_info.find('li', 'mm-p-small-cell mm-p-height').find('p').text)
result.append('体重:' + base_info.find('li', 'mm-p-small-cell mm-p-weight').find('p').text)
result.append('三围:' + base_info.find('li', 'mm-p-small-cell mm-p-size').find('p').text)
result.append('罩杯:' + base_info.find('li', 'mm-p-small-cell mm-p-bar').find('p').text)
result.append('鞋码:' + base_info.find('li', 'mm-p-small-cell mm-p-shose').find('p').text)
print '资料收集完毕,正在保存她的个人资料……'
filename = '%s/%s.txt' % (mm_folder, mm_name)
with open(filename, 'w') as f:
f.write('\r\n'.join(result))
print '保存完毕!现在开始爬取她的个人相册……'
album_menu_url = joint_url(bs1.find('ul', 'mm-p-menu').find('a')['href'])
browser.get(album_menu_url)
time.sleep(3)
bs2 = BeautifulSoup(browser.page_source, 'lxml')
album_number = 1
for album_info in bs2('div', 'mm-photo-cell-middle'):
album_url = joint_url(album_info.find('h4').find('a')['href'])
album_name = album_info.find('h4').find('a').text.strip()
album_size = album_info.find('span', 'mm-pic-number').text
print '现在开始爬取她的第%d个相册,相册名为:《%s》%s……' % (album_number, album_name, album_size)
browser.get(album_url)
js1 = 'return document.body.scrollHeight'
js2 = 'window.scrollTo(0, document.body.scrollHeight)'
old_scroll_height = 0
while(browser.execute_script(js1) > old_scroll_height):
old_scroll_height = browser.execute_script(js1)
browser.execute_script(js2)
time.sleep(3)
bs3 = BeautifulSoup(browser.page_source, 'lxml')
photo_number = 1
for photo_area in bs3('div', 'mm-photoimg-area'):
print '现在开始下载她这个相册的第%d张图片……' % photo_number,
photo_url = joint_url(photo_area.find('a')['href'])
browser.get(photo_url)
bs4 = BeautifulSoup(browser.page_source, 'lxml')
big_img_url = joint_url(bs4.find('img', id='J_MmBigImg')['src'])
content = requests.get(big_img_url).content
filename = '%s/%d.jpg' % (mm_folder, photo_number)
with open(filename, 'wb') as f:
f.write(content)
print '下载完毕!'
photo_number += 1
album_number += 1
爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)的更多相关文章
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- Selenium&PhantomJS 完成爬取网络代理
Selenium模块是一套完整的Web应用程序测试系统,它包含了测试的录制(SeleniumIDE).编写及运行(Selenium Remote Control)和测试的并行处理(Selenimu G ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...
- 动态网页爬取样例(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test" ...
- selenium+phantomjs+pyquery 爬取淘宝商品信息
from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium ...
- Python 之selenium+phantomJS斗鱼抓取案例
from selenium import webdriver from bs4 import BeautifulSoup import time if __name__ == '__main__': ...
- scrapy爬虫实例(1)
爬虫实例 对象 阳光问政平台 目标 : 主题,时间,内容 爬取思路 预先设置好items import scrapy class SuperspiderItem(scrapy.Item): title ...
- Selenium+PhantomJS替代方案
问题描述: python3在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has ...
- Selenium+PhantomJS使用时报错原因及解决方案
问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...
随机推荐
- python处理dict转json,字符串中存在空格问题,导致url编码时,存在多余字符
在进行urlencode转换请求的参数时,一直多出一个空格,导致请求参数不正确,多了一个空格,解决方法一种是将dict中key-value键值对的value直接定义为字符串,另一种是value仍然为字 ...
- .NET邮件发送详情
①百度下载个Free Smtp Server ②下载完成后,打开进去,点击左上角的options,弹出窗口,进行如下图选项即可(一般默认已正确选中),然后我们可以把这软件关了. (下次你重启电脑时,也 ...
- 第一章 了解TCP/IP协议族
第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...
- CryptoZombies学习笔记——Lesson1
CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记. 课程网址:cryptozombies.io 首先是第一课——Lesson1:Making the Zombi ...
- ZOJ 3229 Shoot the Bullet(有源汇的上下界最大流)
Description Gensokyo is a world which exists quietly beside ours, separated by a mystical border. It ...
- 软工冲刺-Alpha 冲刺 (3/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 很胖,刚学,照猫画虎做了登录与注册界面. 展示GitHub ...
- Java中I/O流之处理流类型
节点流:一个管道直接连接到数据源上面: 处理流:套在别的管道上面的管道: 处理流类型: [注]:在字符流中的OuPutStreamReader写错了,应该是:OutputStreamWriter
- 活学活用wxPython
http://www.czug.org/python/wxpythoninaction/
- PAT L1-048 矩阵A乘以B
https://pintia.cn/problem-sets/994805046380707840/problems/994805082313310208 给定两个矩阵A和B,要求你计算它们的乘积矩阵 ...
- Jenkins系列-Jenkins邮件通知
一.安装邮件插件 由于Jenkins自带的邮件功能比较鸡肋,因此这里推荐安装专门的邮件插件,不过下面也会顺带介绍如何配置Jenkins自带的邮件功能作用. 可以通过系统管理→管理插件→可选插件,选择E ...