爬虫BS4—淘女郎
1.修改网页头
用独自的py文件getheaders,随机返回header
getheaders文件
import random headerstr = """Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999 """ def headers():
header = headerstr.split("\n")
length = len(header)
return header[random.randint(0, length - 1)] 2.主文件
# coding:utf-8
from bs4 import BeautifulSoup
import urllib2
from getheaders import headers
from json import loads
import re
import os def reqobject(): # 实例化一个请求对象,还没有访问
# 1、实例化一个请求对象,还没有访问
req = urllib2.Request("https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8")
# 2、对请求对象进行加工,添加用户头
req.add_header('user-agent', headers())
return req def getUrlList(): # 获取页面所有的用户信息
req = reqobject()
# 1.2.再次对对象进行加工,添加参数
req.add_data(
'q&viewFlag=A&sortType=default&searchStyle=&searchRegion=city%3A&searchFansNum=¤tPage=1&pageSize=100')
# 3、访问对象并解码+编码
# """
# decode('gbk') 解码:吧gbk格式解码为Unicode
# decode解码时要对应网页的respon heasers里面的content-type:text/html;charset=GBK
# 若没有则查看网页源代码头部<meta charset="gbk" />
# encode('utf-8') 编码:把Unicode编码为utf-8
# encode只能编码Unicode
# """
html = urllib2.urlopen(req).read().decode('gbk').encode('utf-8')
# 4、取值,html为一个json对象,先转化为dict,便于取值
json_dict = loads(html)
# 5、返回一个列表
return json_dict['data']['searchDOList'] def getInfo(userid): # 获取用户的“她的爱秀”
req = urllib2.Request("https://mm.taobao.com/self/aiShow.htm?&userId=%s" % userid)
req.add_header('user-agent', headers())
html = urllib2.urlopen(req).read().decode('gbk').encode('utf-8')
return html def getNeedInf(html): # 提取我们需要的信息
soup = BeautifulSoup(html, 'html.parser')
name = soup.select('dl > dd > a')[0].text.encode('utf-8')
follow = soup.select('dl > dt > a')[1].text.encode('utf-8')
fens = soup.select('dl > dt > a')[2].text.encode('utf-8')
detail = soup.find('div', attrs={'id': 'J_ScaleImg'}).get_text().strip().encode('utf-8')
content = "姓名:{} 关注:{} 粉丝:{}\n{}".format(name, follow, fens, detail)
if os.path.exists("images\\" + str(userid)) == False:
os.mkdir("images\\" + str(userid))
print 'Start downloading...'
print 'getInf:{}'.format(str(userid))
with open("images\\{}\\{}.txt".format(str(userid), str(userid)), 'wb') as f:
f.write(content) def getAlbumList(userid): # 获取用户的“相册”和相册的封面照片链接
req = urllib2.Request("https://mm.taobao.com/self/album/open_album_list.htm?&user_id%20=" + str(userid)) # 相册链接
req.add_header('user-agent', headers())
html = urllib2.urlopen(req).read().decode('gbk').encode('utf-8')
# 获取每一个相册的链接
rel = r'class="mm-first" href="//(.*?)"'
AlbumListurl = re.findall(rel, html)
# 获取每一个相册的封面的链接,用于下载封面图片
# rel = r'<img src="//(.*?jpg_240x240xz.jpg)" width="125" height="125">'
# 爬取出来的链接:img.alicdn.com/imgextra/i1/176817195/TB1jFcMKFXXXXblXFXXXXXXXXXX_!!0-tstar.jpg_240x240xz.jpg
# 我们需要的链接:img.alicdn.com/imgextra/i1/176817195/TB1jFcMKFXXXXblXFXXXXXXXXXX_!!0-tstar.jpg_620x10000.jpg
# 相差为【jpg_240x240xz.jpg】和【jpg_620x10000.jpg】所以将【jpg_240x240xz.jpg】写在括号外面
# 爬到链接img.alicdn.com/imgextra/i1/176817195/TB1jFcMKFXXXXblXFXXXXXXXXXX_!!0-tstar.
# 再补齐【jpg_620x10000.jpg】,如下
rel = r'<img src="//(.*?)jpg_240x240xz.jpg" width="125" height="125">'
AlbumListCoverurl = re.findall(rel, html)
getAlbumListCoverurl = []
for url in AlbumListCoverurl:
url += "jpg_620x10000.jpg"
url = "http://" + url
getAlbumListCoverurl.append(url)
return getAlbumListCoverurl def getimages(userid, urls): # 通过图片链接下载图片
# http://img.alicdn.com/imgextra/i3/865838484/TB1_n_XKVXXXXb5XXXXXXXXXXXX_!!865838484-0-tstar.jpg_620x10000
# if os.path.exists("images\\" + str(userid)) == False:
# os.mkdir("images\\" + str(userid))
i = 1
for url in urls:
req = urllib2.Request(url)
req.add_header('user-agent', headers())
html = urllib2.urlopen(req).read()
# with open('images\\'+str(userid)+"\\" + str(i) + '.jpg', 'wb') as f:
with open('images\\{}\\{}.jpg'.format(str(userid), str(i)), 'wb') as f:
f.write(html)
print "getImage:", url
i += 1
print "End of download..." for user in getUrlList():
if os.path.exists("images") == False:
os.mkdir("images")
try:
userid = user['userId']
html = getInfo(userid)
getNeedInf(html)
# for i in getAlbumList(userid):
# print i
urls = getAlbumList(userid)
getimages(userid, urls)
except urllib2.URLError,e:
print e.reason
爬虫BS4—淘女郎的更多相关文章
- 爬虫bs4案例
案例:使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifuSou ...
- 爬虫bs4
CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...
- python3.6安装Scrapy
环境:win10(64位), Python3.6(64位) 1.安装pyhthon 这个就不多说了,对应版本就下载对应的依赖包 2.安装pywin32 在windows下,必须安装pywin32,安装 ...
- 96、python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)
在安装scrapy时遇到问题 环境:win10(64位), Python3.6(64位) 安装scrapy: 1.安装wheel(安装后,便支持通过wheel文件安装软件) pip3 install ...
- python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)
在安装scrapy时遇到问题 环境:win10(64位), Python3.6(64位) 安装scrapy: 1.安装wheel(安装后,便支持通过wheel文件安装软件) pip3 install ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Python爬虫(十五)_案例:使用bs4的爬虫
本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.ten ...
- 爬虫,基于request,bs4 的简单实例整合
简单爬虫示例 爬取抽屉,以及自动登陆抽屉点赞 先查看首页拿到cookie,然后登陆要携带首页拿到的 cookie 才可以通过验证 """""" ...
- python爬虫基础_requests和bs4
这些都是笔记,还缺少详细整理,后续会更新. 下面这种方式,属于入门阶段,手动成分比较多. 首先安装必要组件: pip3 install requests pip3 install beautifuls ...
随机推荐
- pthread_create()
pthread_create()创建的线程没有执行,试了好几遍.非常郁闷.后来发现主线程没有睡眠,新创建的线程还没来的及执行主线程就退出了,所以没有执行.
- 数位DP入门题
站点一览: hdu 2089"不要62" hdu 4734"F(X)" poj 3252"Round Numbers" hdu 3709&q ...
- Luogu P2922 [USACO08DEC]秘密消息Secret Message 字典树 Trie树
本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点 ...
- 设计模式_策略模式_在Spring中的应用
一.理论 在spring中经常有读取配置文件的需求,这里就会用到一个Spring提供的Resource接口 Resource 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口.Resour ...
- CSS3 利用border-radius实现椭圆角
效果如图: border-radius共有8个属性值,有四个角,每个角对应两个值(分别是x轴和y轴的值). border-radius: 0 20% 20% 0/0 50% 50% 0; /的左右两边 ...
- STM32学习笔记:【004】USART串口通信
版本:STM32F429 Hal库v1.10 串口通信能够实现两块电路之间不同的通信,在开发中作为打印调试也是一门利器(printf重定向). 补充一点小知识: 1. weak修饰符修饰的函数,说明这 ...
- MapReduce实现词频统计
问题描述:现在有n个文本文件,使用MapReduce的方法实现词频统计. 附上统计词频的关键代码,首先是一个通用的MapReduce模块: class MapReduce: __doc__ = ''' ...
- Django之用户认证组件
auth模块 之前我们在进行用户登录验证的时候,都是自己写代码,接收用户提交的数据,然后去数据库取数据进行匹配验证,其实Django已经给我们提供了内置的用户认证功能.不信的话你可以打开models. ...
- 明白生产环境中的jvm参数
明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...
- js 图片压缩上传(纯js的质量压缩,非长宽压缩)
下面是大神整理的demo,很实用,这里存一下备用,感谢大神! 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下 <!DOCTYPE ht ...