python爬取淘宝淘女郎图片

2017-07-31 10:35:43来源:网络收集作者:咖啡不加糖人点击

分享
第七城市

网上有许多爬取淘宝淘女郎的代码,发现有的都不可用,就自己改写了一个,当前可用日期为2017.07.30


前提

chromedriver.exe(本文用的是2.30,有两种使用方式,一种是直接绝对路径引用(本文使用的方式),一种是配置环境变量),谷歌浏览器的版本(版本 60.0.3112.78(正式版本) 这个需要和chromedriver.exe版本匹配),python3.6


如何查看该用哪个版本的chromedriver,先看谷歌浏览器的版—右上角–帮助–关于Google chrome 查看版本
python爬取淘宝淘女郎图片


主要遇到的问题
1,在写的时间发现https://mm.taobao.com/json/request_top_list.htm点击其中的头像有时跳到个人中心,有时跳到登录页面
解决方案:点击每个人的名字,跳到个人信息,获取其中的 域名地址://mm.taobao.com/tyy6160
造成的问题,有的淘女郎没有--- 域名地址
2,页面的延迟加载,否则获取的页面代码不完整

python爬取淘宝淘女郎图片
解决方案:selenium


代码

说这么多没用的,直接上代码
tool.py


#!/user/bin/env python
# -*- coding: utf-8 -*-
import re
# 处理页面标签类
class Tool:
# 去除img标签,1-7位空格,
removeImg = re.compile('| {1,7}|')
# 删除超链接标签
removeAddr = re.compile('|')
# 把换行的标签换为/n
replaceLine = re.compile('|||

')
# 将表格制表替换为/t
replaceTD = re.compile('')
# 将换行符或双换行符替换为/n
replaceBR = re.compile('
|
')
# 将其余标签剔除
removeExtraTag = re.compile('<.*?>')
# 将多行空行删除
removeNoneLine = re.compile('/n+')
def replace(self, x):
x = re.sub(self.removeImg, "", x)
x = re.sub(self.removeAddr, "", x)
x = re.sub(self.replaceLine, "/n", x)
x = re.sub(self.replaceTD, "/t", x)
x = re.sub(self.replaceBR, "/n", x)
x = re.sub(self.removeExtraTag, "", x)
x = re.sub(self.removeNoneLine, "/n", x)
# strip()将前后多余内容删除
return x.strip()

spider.py


#!/user/bin/env python
# -*- coding: utf-8 -*-
import urllib.request
import urllib
import re
import tool
import os
from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
# 抓取MM
class Spider:
# 页面初始化
def __init__(self):
self.siteURL = 'https://mm.taobao.com/json/request_top_list.htm'
self.tool = tool.Tool()
# 获取索引页面的内容
def getPage(self, pageIndex):
url = self.siteURL + "?page=" + str(pageIndex)
response = urllib.request.urlopen(url)
return response.read().decode('gbk')
# 获取索引界面所有MM的信息,list格式
def getContents(self, pageIndex):
page = self.getPage(pageIndex)
pattern = re.compile(
'(.*?).*?(.*?)',
re.S)
items = re.findall(pattern, page)
contents = []
for item in items:
contents.append([item[0], item[1], item[2], item[3], item[4]])
return contents
# 获取MM个人详情页面
def getDetailPage(self, infoURL):
try:
#引用chromedriver.exe(可以设置到环境变量中)
path = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get(infoURL)
sleep(2)# 强制等待5秒再执行下一步
soup = BeautifulSoup(driver.page_source, 'html.parser')
personUrl = soup.find('div', 'mm-p-info mm-p-domain-info')
realurl = personUrl.span.text
realPage = urllib.request.urlopen("https:" + realurl)
pageCode = realPage.read().decode('gbk')
except Exception as err:
return 0
return pageCode
# 获取个人文字简介
def getBrief(self, page):
pattern = re.compile('(.*?)', re.S)
result = re.search(pattern, page)
return self.tool.replace(result.group(1))
def getRealUrlPage(self,page):
#引用chromedriver.exe(可以设置到环境变量中)
path = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get('https://mm.taobao.com/self/model_info.htm?user_id=687471686&is_coment=false')
sleep(2)# 强制等待5秒再执行下一步
soup = BeautifulSoup(driver.page_source, 'html.parser')
personUrl = soup.find('div', 'mm-p-info mm-p-domain-info')
realurl = personUrl.span.text
realPage = urllib.request.urlopen("https:" + realurl)
# print(realPage)
sp = BeautifulSoup(realPage, 'html.parser')
# 获取页面所有图片
def getAllImg(self, page):
pattern = re.compile('(.*?)

微信扫一扫

第七城市微信公众平台