爬虫BS4—淘女郎

1.修改网页头

用独自的py文件getheaders,随机返回header

getheaders文件

import random

headerstr = """Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like GeckoMozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0Mozilla/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-8from bs4 import BeautifulSoupimport urllib2from getheaders import headersfrom json import loadsimport reimport 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=&currentPage=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
 
 
时间: 2024-10-12 07:27:35

爬虫BS4—淘女郎的相关文章

爬虫bs4

CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml. BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器.Python标准库中的HTML解析器,也支持 l

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 wheel 2.安装lxml.pyopenssl lxml:解析XML的库,很强大,做爬虫BS4,selenium,XPATH都会用到 pip3 install lxml pip3 install pyopenssl 3.安装pywin32 下载网址: https://sourceforge.net

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

爬虫实例——爬取淘女郎相册(通过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 sub

爬虫实例——爬取淘女郎的相册(通过谷歌浏览器的开发者工具找出规律快速爬取)

用正常的方式(selenium.PhantomJS.BeautifulSoup)爬取淘女郎相册不仅困难,效率很低,而且很容易卡死. 我通过谷歌浏览器的开发者工具找出每个页面的规律,快速获取每张照片的链接,再下载,这样效率就很高了. 过程 首页很简单,没有采用JS渲染,直接用requests就能获取完整的源代码,没什么说的. 淘女郎首页采用了JS渲染,直接用requests是获取不到完整的源代码的,此时可以打开谷歌浏览器的开发者工具,主要看“Network”,筛选出“XHR”,如下图: 从上图可知

Python爬虫(十五)_案例:使用bs4的爬虫

本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifulSoup4解析器,将招聘网页上的职位名称.职位类别.招聘人数.工作地点.时间.以及每个职位详情的点击链接存储出来. #-*- coding:utf-8 -*- from bs4 import Beautiful

学习Python爬虫第一步,Bs4库

首先是安装BS4库 因为Python的pip真的很方便,所以一般不出意外,只需要一个pip就足以完成一个库的安装. pip install beautifulsoup4 名字很长不要记错名字呦. 想要利用爬虫获得我们想要的内容,就一定要学会一个解析HTML的库. 我们总不能用正则表达式,匹配出我们需要的内容,那任务量一定是巨大的,繁琐的,很少有人去那么做,除非你就是需要这个网页中特定的元素. 怎么使用BS4库? Bs4库和有些库还有一些不同,像我们学习爬虫一定要学习的requests库,我们只需

爬虫入门之爬取策略 XPath与bs4实现(五)

爬虫入门之爬取策略 XPath与bs4实现(五) 在爬虫系统中,待抓取URL队列是很重要的一部分.待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面.而决定这些URL排列顺序的方法,叫做抓取策略.下面重点介绍几种常见的抓取策略: 1 深度优先遍历策略: 深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接.我们以下面的图为例:遍历的路径:A-F-G E-H-I B C D

爬虫 requests,bs4 用法示例

requests 模块 用法 import requests # 1. 方法""" requests.get requests.post requests.put requests.delete ... requests.request(method='POST') """ # 2. 参数 """ 2.1 url 2.2 headers 2.3 cookies 2.4 params 2.5 data,传请求体 req