萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + urlretrieve 抓取并保存图片:weheartit

博客第三天

测试页面:weheartit:https://weheartit.com/inspirations/taylorswift?page=1&scrolling=true&before=308888434,

目的:爬取并存储页面上的图片,


工程内容:Python3.5,jupyter notebook

工具包:requests, BeautifulSoup,urllib.request

代码(可翻页):

import requests
from bs4 import BeautifulSoup as bs
import urllib.request as urlrequest         #用于存储图片
import time                                          #设定暂定
import random                                    #随机函数


headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36',
}                  #自写headers
# proxies = {'https':'62.133.191.116:8080'}
path = 'D:Python_projects/taylorswift_imgs/10pages1/'          #定义存储路径
#urls = ['https://weheartit.com/inspirations/taylorswift?page={}&scrolling=true&before=308888434'.format(str(i)) for i in range(20)]                      #此次未使用
base_url = 'https://weheartit.com/inspirations/taylorswift?page='              #用于爬虫
def get_url(num):                  #定义函数,获取图片链接
    imgs_url = []                     #用于存储图片链接
    for page_num in range(6,num + 1):                  #开始获取链接
        time.sleep(random.uniform(1,5))                  #随机暂停1~5s
        full_url = base_url + str(page_num)              #补充链接
        web = requests.get(full_url,headers = headers)     #获取页面
        soup = bs(web.text,'lxml')                                     #解析页面
        imgs = soup.select('img.entry-thumbnail')             #抽取图片
        for img in imgs:
            time.sleep(random.uniform(1,5))
            img_url = img.get('src')                #抽取图片链接
            imgs_url.append(img_url) 
    return imgs_url
        #print(imgs_url)         #用于测试


def dl_imgs(img_url):    #定义函数,下载图片
    urlrequest.urlretrieve(img_url,path+img_url.split('/')[-2]+img_url.split('/')[-1])       #下载并命名


for img_url in get_url(10):             #调用函数,获取图片链接
    time.sleep(random.uniform(1,5))
    dl_imgs(img_url)               #调用函数,存储图片


print结果(部分):


此处print imgs_url 里面的链接,共1080条,此处保存为csv以供分析

存储截图(部分):


内容:成功存储前十页240张图片,两个子文件夹分别为前5页和后5页内容(因为被封锁多次,所以测试了很久由于时间问题,没有一次性爬取10页,另外的24张图片为第一页爬取测试时存储的)

error:1 . 设置代理进行翻页爬取时,总是被封锁(和之前的另一个工程很像,应该是代理之类的问题)

          2 . 不设置proxies,只用headers,在使用浏览器插件的情况下可以比较好地完成任务

          3 . 比较耗费时间,因为随机时间设置太短或者太规律容易被封锁

          4 . 此次同时联系函数的定义和使用,如果只用for循环的话应该更容易完成爬取10页的任务

总结:

    1. 注意存储路径的设置

    2. 存储文件的命名匹配规则,注意.strip( ) [ -n ]方法的应用

    3. (翻页时)注意函数的逻辑性

    4. 由于使用了浏览器插件,如果再设置代理反而会影响爬取(以前也有设置代理反而被封锁的情况)

    5. 对于函数中涉及增加以及返回值的部分需要认真分析

    6. 此次下载的图片似乎跟分析的页面有些出入,这点需要再花时间弄清楚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值