怎么读url图片_最简单的Python爬虫示例——下厨房首页图片

c32082828043443ab7273dcd937188ac.png

(把知乎当github用)

爬虫应该算是入门容易进阶难。下面实现一个最简单的爬取下厨房首页图片的例子。

import os
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import requests
 
headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
        'AppleWebKit/537.36 (KHTML, like Gecko) '
        'Chrome/68.0.3440.106 Safari/537.36'
}

r = requests.get('http://www.xiachufang.com', headers=headers)
soup = BeautifulSoup(r.text, 'lxml')

image_dir = os.path.join(os.curdir, 'xiachufang-images')
img_list = []

for img in soup.select('img'):
    if img.has_attr('src'):
        img_list.append(img.attrs['src'])
    else:
        img_list.append(img.attrs['src'])

for img in img_list:
    o = urlparse(img)

    if not o.path[1:]:
        continue

    filepath = os.path.join(image_dir, o.path[1:])
    if not os.path.isdir(os.path.dirname(filepath)):
        os.mkdir(os.path.dirname(filepath))

    url = '%s://%s%s' % (o.scheme, o.netloc, o.path)
    resp = requests.get(url, headers=headers)
    with open(filepath, 'wb') as f:
        for chunk in resp.iter_content(1024):
            f.write(chunk)

爬取效果:

2187a3c3a4d3ab1602dd893c5ec2070e.png

8c6a97b98fe17ff8ff1a15f313ce2b89.png

957f4d119e543975a20e91050372e816.png

(是不是还挺有食欲的)

代码的几个要点:

  1. HTTP GET request需要加headers,俗话说演戏演全套,如果不加headers的话,下厨房的服务器会拒绝你的HTTP request...
  2. 为什么要专门用url = '%s://%s%s' % (o.scheme, o.netloc, o.path)来合成下载图片的url?因为原本的|img|这个url里面带有附加参数,会使得我们下载小图片。我们合成的|url|不带有附加参数,就可以下载大图片。
  3. 有些图片的src链接在src属性里,而不在src属性里,所以要专门看过HTTP response的形式再决定爬虫怎么写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值