您的位置:首页 > 编程语言 > Python开发

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

2018-03-16 21:41 851 查看
博客第三天测试页面: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. 此次下载的图片似乎跟分析的页面有些出入,这点需要再花时间弄清楚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python 爬虫
相关文章推荐