爬虫之requests库

Why requests

python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码。

Requests 使用的是 urllib3,因此继承了它的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。现代、国际化、人性化。。

官方文档:http://docs.python-requests.org/en/master/

中文文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

安装:

pip install requests

或者下载源码后安装

$ git clone git://github.com/kennethreitz/requests.git
$ cd requests
$ python setup.py install

也可以通过IDE安装比如pycharm(File-settings-Projecr Interpreter 点击右边的加号"+"然后搜索requests点击Install Package安装)

爬取校花网视频:

import requests
import re
import os
import hashlib
import time

DOWLOAD_PATH = r‘D:\Downloads‘

def get_page(url):
    try:
        response = requests.get(url, )
        if response.status_code == 200:
            return response.text
    except Exception:
        pass

def parse_index(index_contents):
    detail_urls = re.findall(‘class="items".*?href="(.*?)"‘, index_contents, re.S)
    for detail_url in detail_urls:
        if not detail_url.startswith(‘http‘):
            detail_url = ‘http://www.xiaohuar.com‘ + detail_url
        yield detail_url

def parse_detail(detail_contents):
    movie_urls = re.findall(‘id="media".*?src="(.*?)"‘, detail_contents, re.S)
    if movie_urls:
        movie_url = movie_urls[0]
        if movie_url.endswith(‘mp4‘):
            yield movie_url

def download(movie_url):
    print(movie_url)
    try:
        response = requests.get(movie_url,
                                )
        if response.status_code == 200:
            data = response.content
            m = hashlib.md5()
            m.update(str(time.time()).encode(‘utf-8‘))
            m.update(movie_url.encode(‘utf-8‘))
            filepath = os.path.join(DOWLOAD_PATH, ‘%s.mp4‘ % m.hexdigest())
            with open(filepath, ‘wb‘) as f:
                f.write(data)
                f.flush()
                print(‘下载成功‘, movie_url)
    except Exception:
        pass

def main():
    raw_url = ‘http://www.xiaohuar.com/list-3-{page_num}.html‘
    for i in range(5):
        index_url = raw_url.format(page_num=i)
        index_contents = get_page(index_url)
        detail_urls = parse_index(index_contents)

        for detail_url in detail_urls:
            detail_contents = get_page(detail_url)
            movie_urls = parse_detail(detail_contents)

            for movie_url in movie_urls:
                download(movie_url)

if __name__ == ‘__main__‘:
    main()

注:D盘要创建一个Downloads文件夹

线程池版

import requests
import re
import os
import hashlib
import time
from concurrent.futures import ThreadPoolExecutor

pool = ThreadPoolExecutor(50)
DOWLOAD_PATH = r‘D:\Downloads‘

def get_page(url):
    try:
        response = requests.get(url, )
        if response.status_code == 200:
            return response.text
    except Exception:
        pass

def parse_index(index_contents):
    index_contents = index_contents.result()
    detail_urls = re.findall(‘class="items".*?href="(.*?)"‘, index_contents, re.S)
    for detail_url in detail_urls:
        if not detail_url.startswith(‘http‘):
            detail_url = ‘http://www.xiaohuar.com‘ + detail_url
        pool.submit(get_page, detail_url).add_done_callback(parse_detail)

def parse_detail(detail_contents):
    detail_contents = detail_contents.result()
    movie_urls = re.findall(‘id="media".*?src="(.*?)"‘, detail_contents, re.S)
    if movie_urls:
        movie_url = movie_urls[0]
        if movie_url.endswith(‘mp4‘):
            pool.submit(download, movie_url)

def download(movie_url):
    try:
        response = requests.get(movie_url,
                                )
        if response.status_code == 200:
            data = response.content
            m = hashlib.md5()
            m.update(str(time.time()).encode(‘utf-8‘))
            m.update(movie_url.encode(‘utf-8‘))
            filepath = os.path.join(DOWLOAD_PATH, ‘%s.mp4‘ % m.hexdigest())
            with open(filepath, ‘wb‘) as f:
                f.write(data)
                f.flush()
                print(‘下载成功‘, movie_url)
    except Exception:
        pass

def main():
    raw_url = ‘http://www.xiaohuar.com/list-3-{page_num}.html‘
    for i in range(5):
        index_url = raw_url.format(page_num=i)
        pool.submit(get_page, index_url).add_done_callback(parse_index)

if __name__ == ‘__main__‘:
    main()

参考博客:

http://www.zhidaow.com/post/python-requests-install-and-brief-introduction

http://blog.csdn.net/shanzhizi/article/details/50903748

原文地址:https://www.cnblogs.com/0bug/p/8252929.html

时间: 2024-10-13 14:59:20

爬虫之requests库的相关文章

爬虫基础(requests库的基本使用)--02

什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作.(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库. 默认安装好python之后,是没有安

爬虫(requests库的使用)

1.安装requests库 2.

python网络爬虫之requests库

Requests库是用Python编写的HTTP客户端.Requests库比urlopen更加方便.可以节约大量的中间处理过程,从而直接抓取网页数据.来看下具体的例子: def request_function_try():     headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0'}     r=requests.get(url="http://www

python爬虫之requests库

requests库介绍 发送http请求的第三方库,兼容python2和python3 安装: pip install requests 使用: import requests发送请求response = requests.get(url)response = requests.post(url) 响应内容请求返回的值是一个response对象,是对http协议服务端返回数据的封装response对象主要属性和方法: response.status_code  返回码  response.hea

Python爬虫之Requests库入门

目录 Requests库 Requests库的7个主要方法 Requests库的get()方法 Response对象的属性 理解Requests库的异常 爬取网页的通用代码框架 HTTP协议 协议对资源的操作 理解PATCH和PUT的区别 HTTP协议与Requests库 Requests库 Requests库的7个主要方法 方法 说明 requests.request() 构造一个请求,支撑以下各方法的基础方法 requests.get() 获取HTML网页的主要方法,对应于HTTP的GET

【Python爬虫】Requests库的安装

1.按照普通的pip不能行,说find不能 有位小杰控的大牛说了一句:换一个国内的更新源吧, pip install requests -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com 然后就好了! 原文地址:https://www.cnblogs.com/naraka/p/8994173.html

python爬虫从入门到放弃(四)之 Requests库的基本使用

什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作.(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库. 默认安装好python之后,是没有安

爬虫——Requests库初识

1.Requests是什么 首先Requests是HTTP库,在爬虫中用于请求的相关功能. 而且requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库. 默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装. 2.Requests的使用 import requests response = requests.get('https://www.baidu.com') print(response.text) print(respo

爬虫(Requests)

什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,但他比urllib更加方便,可以完全替代urllib.一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库.以下为总体功能的一个演示: import requests response = requests.get("https://www.baidu.com") print(type(respo