Python 爬虫零基础教程(6):Lofter 爬虫

输入 lofter 博客网址,下载博客图片

不是所有的lofter博客都好使,每个博客代码不同。主发照片的博客通常好使。


效果图:


代码:

# python2
#coding:utf-8
# Filename:lofter.py
# 输入 LOFTER 博客网址,下载博客图片
# 不是所有的 lofter 博客都好使,每个博客代码不同。主发照片的博客通常好使。


import requests
import re
from time import sleep

user_agent = ''
headers = {'User-Agent': user_agent}

def page_url(url, page):
    url_0 = url
    page = int(page) + 1
    page_url_list = []
    num = 1
    while (num < page):
        url = url_0 + '?page=' + str(num)
        page_url_list.append(url)
        num += 1
    return page_url_list

def pic_url(page_url_list):
    pic_url_list = []
    for url in page_url_list:
        data = requests.get(url, headers = headers).content
        urls = re.findall('<img src="(.+?).jpg', data, re.S)
        # 大部分的博客每页的第一个图片是博主头像,但有的不是
        for url in urls:
            portrait = re.search('imgsize', url) # portrait 肖像
            if not portrait: #过滤掉博主头像
                pic_url = url + '.jpg'
                pic_url_list.append(pic_url)
    return pic_url_list


def download_pic(pic_url_list):
    pic_url_list = pic_url_list
    num = 1
    for url in pic_url_list:
        data = requests.get(url, headers=headers).content
        download_file_name = str(num) + '.jpg'
        f = open(download_file_name, 'wb')
        f.write(data)
        f.close()
        print('Download pic ' + str(num) + ':')
        print(url)
        num += 1
        if (num%5==0):
            print('')
            sleep(3)
    print('\n下载完成')


def start():
    url = raw_input('博客网址:\n')
    page = raw_input('下载几页?\n')
    print('\n爬虫开始工作、、、\n')
    page_url_list = page_url(url, page)
    pic_url_list = pic_url(page_url_list)
    download_pic(pic_url_list)
start()
        
        



知识点


赋值运算符

= ,c = a + b 将 a + b 的运算结果赋值为 c

+= ,加法赋值运算符,c += a 等效于 c = c + a

-= ,减法赋值运算符, c -= a 等效于 c = c - a


sleep() 方法

import time
time.sleep(t)

# 或者
from time import sleep
sleep(t)

代表程序将在这里暂停 t 秒,t 可以是浮点数。实际的暂停时间可能会小于 t 秒。


int() 函数

用于将一个字符串或数字转换为整型

>>> int('12')
12


append() 方法

用于在列表末尾添加新的对象。

语法:

list.append(obj)

obj 添加到列表末尾的对象。
该方法无返回值,但是会修改原来的列表。

示例:

aList = [123, 'xyz', 'zara', 'abc'];
aList.append( 2009 );
print aList;

# 输出:
[123, 'xyz', 'zara', 'abc', 2009]


while循环

只要条件满足,就不断循环,条件不满足时退出循环。while语句有一个可选的else从句。

while 判断条件:
    执行语句……

示例:

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"

# 输出:
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!

while / else 循环:
while 判断条件为 false 时 运行 else


正则 re.search

扫描整个字符串并返回第一个成功的匹配。匹配成功返回一个 Match 对象,否则返回None。

语法:

re.search(pattern, string, flags=0)

pattern:匹配的正则表达式
string:要匹配的字符串。
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

示例:

import re

str_list = ['111','222','333','444']
for str_i in str_list:
    str_0 = re.search('333',str_i)
    if str_0:
        print(str_0)
    else:
        print('no find')

# 输出:
no find
no find
<re.Match object; span=(0, 3), match='333'>
no find


文件路径

文件路径就是文件在电脑中的位置。表示路径的方式有两种,相对路径和绝对路径。

相对路径:相对路径就是相对于当前文件的路径。

绝对路径:也叫完整路径,指从根目录开始,完整的描述文件位置的路径。例如,/etc/uucp/Devices 指根目录下的 etc 目录下的 uucp 目录下的 Devices 文件。在最前面输入正斜杠 / 来表示根目录,用正斜杠 / 来分隔路径中的各级目录。(目录就是文件夹)

示例:

绝对路径

download_file_name = str(num) + '.jpg'
f = open(download_file_name, 'wb')

表示在当前目录创建图片文件,即代码的 .py 文件所在的文件夹,图片依次命名为 1.jpg2.jpg ...

如果改成绝对路径

download_address = '/Users/v1coder/'+str(num) + '.jpg'
f = open(download_file_name, 'wb')

则表示在根目录下的 Users 目录下的 v1coder 目录下,创建图片文件,图片依次命名为 1.jpg2.jpg ...


读取键盘输入

raw_inputinput

都是读取键盘的输入,产生一个返回值。

区别
raw_input() 将所有输入作为字符串看待,返回字符串类型。
input() 会假设你的输入是一个有效的Python表达式。输入数字类型( int, float ),返回数字类型;输入表达式,返回计算结果;如果想输入字符串,必须加引号。

raw_input() 和 input() 括号里通常包含一个字符串,说明要输入的内容,例如:

a_input = raw_input('请输入一个字符串:')

屏幕会先输出 请输入一个字符串:,我们在后面输入,输入的内容就会赋值给 a_input

示例:

input_1 = input('input_1:')
input_2 = input('input_2:')
input_3 = input('input_3:')

input_4 = raw_input('input_4:')

print('-----------')
print(input_1)
print(input_2)
print(input_3)
print(input_4)
print('-----------')


# 输出:
# 冒号后面都是我输入的内容
input_1:123
input_2:123+456
input_3:'a str'
input_4:222+333
-----------
123
579
a str
222+333
-----------


函数的参数

定义函数时如果有参数,那么在调用此函数时就要提供参数

def test(param_1,param_2):
    print(param_1)
    print(param_2)
    print('a test')

test(1,2)

# 输出:
1
2
a test

如果只传入一个参数,或者没传入参数,就会报错。



提供两个博客地址测试代码:

http://lurenjiajiepai.lofter.com/ 街拍

http://inpetphoto.lofter.com/ 萌宠



教程目录:
0.《简介及准备》
1.《爬单个图片》
2.《下载一组网页上的图片》
3.《输出一个网页上的文字》
4.《获取电影天堂最新电影名称》
5.《糗事百科爬虫》
6.《Lofter 爬虫》

2019-01-02

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354