爬虫2(二)

一,校花网图片

from requests_html import HTMLSession
import os

class spider():
    def __init__(self):
        self.session = HTMLSession()
        self.headers = {
            ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36‘
        }

    def get_index_url(self):
        for i in range(1,4):
            if i == 1:
                yield ‘http://www.xiaohuar.com/meinv/index.html‘
            else:
                yield ‘http://www.xiaohuar.com/meinv/index_%s.html‘%i

    def get_img_name(self,index_url):
        r = self.session.get(url=index_url,headers=self.headers)
        elements_list = r.html.find(‘#images .items‘)
        for element in elements_list:
            img_url:str = element.find(‘img‘,first=True).attrs.get(‘src‘)
            if not img_url.startswith(‘http‘):
                img_url = ‘http://www.xiaohuar.com‘ + img_url
            img_name = element.find(‘.p_title>a‘,first=True).text.replace(‘\\‘,‘‘).replace(‘/‘,‘‘) + ‘.jpg‘
            yield img_url,img_name

    def save_img(self,img_url,img_name):
        r = self.session.get(url=img_url)
        img_path= os.path.join(‘校花图片‘,img_name)
        with open(img_path,‘wb‘) as f:
            f.write(r.content)
            print(‘%s下载完毕‘%img_name)

    def run(self):
        for index_url in self.get_index_url():
            for img_url,img_name in self.get_img_name(index_url):
                self.save_img(img_url,img_name)

if __name__ == ‘__main__‘:
    xiaohua = spider()
    xiaohua.run()

二.豆瓣

from requests_html import HTMLSession

#测试
# session = HTMLSession()
# url=‘https://movie.douban.com/tag/#/?sort=S&range=0,10&tags=2018‘
#
# r = session.get(url=url)
# print(r.text)

#电影    %E7%94%B5%E5%BD%B1

# print(str(‘电影‘.encode(‘utf-8‘)).strip("‘b").replace(‘\\x‘,‘%‘).upper())

class spider():
    def __init__(self):
        self.api = ‘https://movie.douban.com/j/new_search_subjects?‘
        self.session = HTMLSession()

    def get_params(self):
        year_range = input(‘输入年份‘)    #年份是一个区间,逗号隔开
        sort = input(‘输入排序规则(S按评分)‘)

        self.params = {
            ‘year_range‘:year_range,
            ‘sort‘:sort,
            ‘start‘:0
        }

    def get_data(self):
        for i in range(10):
            self.params[‘start‘] = i*20
            r = self.session.get(url=self.api,params=self.params)
            print(r.json())

    def run(self):
        self.get_params()
        self.get_data()

if __name__ == ‘__main__‘:
    douban = spider()
    douban.run()

三.校花网视频

from requests_html import HTMLSession
import os

class spider():

    def __init__(self):
        self.session = HTMLSession()

    def get_index_page(self):
        for i in range(7):
            url = ‘http://www.xiaohuar.com/list-3-%s.html‘%i
            yield url

    def parse_index_page(self,index_page):
        r = self.session.get(url=index_page)
        elements_list = r.html.find(‘#images .items a[class="imglink"]‘)
        for element in elements_list:
            yield element.attrs.get(‘href‘)

    def parse_detail_page(self,detail_page):
        r = self.session.get(url=detail_page)
        r.html.encoding = ‘GBK‘
        result_obj = r.html.search(‘var vHLSurl    = "{}";‘)
        if result_obj:
            m3u8_url = result_obj[0]
            m3u8_name = r.html.find(‘title‘,first=True).text.replace(‘\\‘,‘‘)
            yield m3u8_url,m3u8_name
        else:
            print("匹配失败,无资源")

    def save_m3u8(self,m3u8_url,m3u8_name):
        m3u8_dir = m3u8_name
        if not os.path.exists(m3u8_dir):
            os.mkdir(m3u8_dir)
        print(m3u8_url)
        r = self.session.get(url=m3u8_url)
        m3u8_path = os.path.join(m3u8_dir,‘playlist.m3u8‘)
        with open(m3u8_path,‘wt+‘,encoding=‘utf-8‘) as f :
            f.write(r.text)
            f.seek(0,0)
            for line in f:
                line = line.strip()
                if line.endswith(‘.ts‘):
                    ts_url = os.path.dirname(m3u8_url) + ‘/%s‘%line
                    r = self.session.get(url=ts_url)
                    ts_path =  os.path.join(m3u8_dir,line)
                    with open(ts_path,‘wb‘) as f1:
                        f1.write(r.content)
                        print(‘%s下载完毕‘%line)

    def run(self):
        for url in self.get_index_page():
            for detail_page in  self.parse_index_page(url):
                for m3u8_url,m3u8_name in self.parse_detail_page(detail_page):
                    self.save_m3u8(m3u8_url,m3u8_name)

if __name__ == ‘__main__‘:
    xioahua = spider()
    xioahua.run()

四.tmall

from requests_html import HTMLSession

class spider():

    def __init__(self):
        self.session = HTMLSession()
        self.api= ‘http://list.tmall.com/search_product.htm?‘

    def get_params(self):
        pro = input("输入你要爬取的商品:")
        self.params = {
            ‘q‘:pro,
            ‘totalPage‘:1,
            ‘jumpto‘:1
        }

    def get_totalPage(self):
        r = self.session.get(url=self.api,params=self.params)
        totalPage = r.html.find(‘[name="totalPage"]‘,first=True).attrs.get(‘value‘)
        self.params[‘totalPage‘] = int(totalPage)

    def get_pro_info(self):
        for i in range(1,self.params[‘totalPage‘]+1):
            self.params[‘jumpto‘] = i
            r = self.session.get(url=self.api, params=self.params)
            elements_pro_list = r.html.find(‘.product‘)
            for element_pro in elements_pro_list:
                title = element_pro.find(‘.productTitle a‘,first=True).text
                price = element_pro.find(‘.productPrice em‘,first=True).attrs.get(‘title‘)
                print(title)
                print(price)
                print(‘-‘*30)

    def run(self):
        self.get_params()
        self.get_totalPage()
        self.get_pro_info()

if __name__ == ‘__main__‘:
    tmall = spider()
    tmall.run()

 

原文地址:https://www.cnblogs.com/sima-3/p/11699601.html

时间: 2024-08-30 10:48:15

爬虫2(二)的相关文章

Python爬虫进阶二之PySpider框架安装配置

关于 首先,在此附上项目的地址,以及官方文档 PySpider 官方文档 安装 1. pip 首先确保你已经安装了pip,若没有安装,请参照 pip安装 2. phantomjs PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM 处理.CSS 选择器.JSON.Canvas 和 SVG. PhantomJS 可以用于页面自动化.网络监测.网页截屏以及无界面测试等. 安装 以上附有官方安

Python爬虫实战二之爬取百度贴吧帖子

大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不好使,八成是正则表达式那儿匹配不到了,请更改一下正则,当然最主要的还是帮助大家理解思路. 2016/12/2 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:ht

Python爬虫利器二之Beautiful Soup的用法

上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HTML或XML标签中的内容,实在是方便,这一节就让我们一起来感受一下Beautiful Soup的强大吧. 1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官

转 Python爬虫入门二之爬虫基础了解

静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML.JS.CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了. 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容

转 Python爬虫实战二之爬取百度贴吧帖子

静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件

python爬虫(二):向网页提交数据

python爬虫(二):向网页提交数据 回忆一下,我们有的时候在看一些网站的时候,是否遇见过一些网站里面的信息开始显示一部分,然后当我们把鼠标滑轮向下拉动后,又显示出一些信息.这就是异步加载.我的上一篇文章python爬虫百度贴吧标题数据爬取的所有标题都是页面已经加载好的.但是对于这种开始没有加载好的数据我们应该如何爬取呢? 接下来我们先介绍下一些概念: 异步加载:举个简单的例子就是说,假如老师判作业,有两种情况,第一种就是无论哪个学生先写完,都等待到所有的同学全部写完,老师讲所有的作业都收齐后

python实现简单爬虫(二)---- 使用urllib等python模块

之前使用scrapy实现了一个超级简单的爬虫工具,用于抓取豆瓣上面所有的编程书籍信息(由于不需要爬取整个页面的所以链接,所以不需要用到BFS or DFS,只实现顺序抓取下一页) 这次使用的是python自带的urllib 和urllib2等python模块实现,同样以豆瓣上面的爱情电影信息作为爬取对象,方法与过程其实如出一辙,同样是对每一个页面发出请求后获取响应得到的网页源码,再使用正则表达式去匹配获得所需信息,然后获取下一页的链接继续爬取. 爬取页面: 网页源码: title and lin

基于C#.NET的高端智能化网络爬虫(二)(攻破携程网)

本篇故事的起因是携程旅游网的一位技术经理,豪言壮举的扬言要通过他的超高智商,完美碾压爬虫开发人员,作为一个业余的爬虫开发爱好者,这样的言论我当然不能置之不理.因此就诞生了上一篇基础爬虫以及这一篇高级爬虫的开发教程. 有人评论我上一篇的简单爬虫:代码太过简单以至于弱爆了,真是被这群有文化的孩子给雷到了!不得不猜测你是不是携程网的托儿,我还没写完你咋就知道弱爆了?看来不下点猛料你是得不到满足啊! 今天我们就来学习高级爬虫的开发,同时我们还要利用之前的简单爬虫程序,来实现分布式爬虫的Links Mas

Python爬虫Scrapy(二)_入门案例

本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的Spider并提取出结构化数据(Item) 编写Item Pipelines来存储提取到的Item(即结构化数据) 一.新建项目(scrapy startproject) 在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令: scrapy startproject cnblogS

Python爬虫(二)网络爬虫的尺寸与约束

Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.网络爬虫的尺寸: 1.小规模,数据量小,爬取速度不敏感,Requests库,爬取网页 2.中规模,数据规模较大,爬取速度敏感,Scrapy库,爬取网站 3.大规模,大规模,搜索引擎,爬取速度很关键,定制开发,爬取全站 二.Robots协议: 1.含义Robots Exclusion Standard 网络爬虫排除标准2.作用:网站告知网络爬虫哪些页面可以抓取,哪些不行3.形式:在网站根目录下的robots.