使用requests和beautiful soup下载网页数据

栏目: Python · 发布时间: 5年前

内容简介:Python中有很多方便的包,requests和beautiful soup可以很简单将一个网站直接下载下来。requests是一个非常简单的http库,比urllib2要人性化很多。官网很贴心的,对比了用两个模块来做同一件的数据的代码量。4 VS 11 哪个更方便简洁,毋庸置疑。

Python中有很多方便的包,requests和beautiful soup可以很简单将一个网站直接下载下来。

Requests

requests是一个非常简单的http库,比urllib2要人性化很多。官网很贴心的,对比了用两个模块来做同一件的数据的代码量。

requests代码样例

import requests

r = requests.get('https://api.github.com', auth=('user', 'pass'))

print r.status_code
print r.headers['content-type']

urllib2代码样例

import urllib2

gh_url = 'https://api.github.com'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'user', 'pass')

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

print handler.getcode()
print handler.headers.getheader('content-type')

4 VS 11 哪个更方便简洁,毋庸置疑。

安装requests

由于 python 3生态的成熟,需要库已经在官网上明确力挺python3,requests就是其中之一。

pip3 install requests

requests可以用来方便的下载网页并保存到本地。

beautiful soup

beautiful soup是用于解析HTML代码的python库,提供了很多便捷的方法来提取特定的HTML元素。

安装beautiful soup

beautiful soup有3和4两个版本,建议直接使用4版本。

pip install beautifulsoup4

在下载数据任务中,beautiful soup的角色主要是解析需要下载的url及img等资源。具体的下载的任务交给requests来进行。

动手下载

第一步需要有个起始的baseurl,从里面获取要下载的url里面。 第二步是下载每个页面,并且记录每个页面的img 第三部下载所有img

根据baseurl获取所有要下载的url

import requests
from bs4 import BeautifulSoup
BASE_URL = 'http://baseurl.com'
r = requests.get(BASE_URL)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text)
urls = []
for link in soup.find_all('a'):
    urls.append(link.get('href'))
EXCLUDE = []
urls = [url for url in urls if url not in EXCLUDE]

需要注意一下页面的编码,如果编码不正确会出现乱码。

beautil soup会把html解析成类似嵌套的字典的结构。通过find_all方法可以找到所有特定html标签,通过get方法可以找到特定标签下的对应值。url是放入href属性中。

由于页面上的肯定存在某些url不是我们想要的,所以增加了一个排除的列表。

下载每个页面,并且记录所有img

imgs = []
for url in urls:
    r = requests.get(BASE_URL + url)
    # 下载HTML
    with open(url, 'wb') as fd:
        for chunk in r.iter_content(1024):
            fd.write(chunk)
    # 记录下图片
    soup = BeautifulSoup(r.text)
    for img in soup.find_all('img'):
        imgs.append(img.get('src'))

iter_content是将html转化为文件流写入文件。

find_all还是用来查找所有的img标签,所不同的是,img地址是放在src属性中。

这里需要注意的是,html中的地址很多的是相对地址,因此,真实的地址需要增加BASE_URL。

下载所有img

# 下载图片
for img in imgs:
    r = requests.get(BASE_URL + img)
    if r.status_code == 200:
        with open(img, 'wb') as f:
            for chunk in r.iter_content(1024):
                f.write(chunk)

将上面收集到img都下载下来。

这里需要注意一下,img通常都是放入特定目录中,因此,需要先创建对应的文件夹。

好了,找一个你感兴趣的网页试一下吧。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

淘宝、天猫电商运营百科全书

淘宝、天猫电商运营百科全书

刘涛 / 电子工业出版社 / 2016-7 / 59.00元

有人说淘宝、天猫上90%的卖家不赚钱,我认为说得有点大了。因为如果说大家都不赚钱或者在亏钱,为什么去年在做店铺的卖家,今年还在继续?那些不赚钱的卖家,多数是没意识到市场的变化,还在用原来的套路运营店铺。市场在变,但卖家的思路却没有转变,不赚钱也在情理之中,因为淘宝、天猫的玩法变了。做店铺就是好比一场“打怪”升级的游戏,每次的升级都需要强大的装备与攻略。优胜劣汰,能活下去并且能赚钱的卖家,都是在不停......一起来看看 《淘宝、天猫电商运营百科全书》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具