今天来抓一下LOFTER上2016年度热门摄影作品的网页,并且把页面上的热门摄影作品保存在本地。

Python版本:3.5.3
代码用到的库有
1.requests :用来获取网页源代码
2.BeautifulSoup:用来解析网页获得图片链接

1
2
import requests
from bs4 import BeautifulSoup

下面开始写代码
首先要找到所需要抓取的网页地址,打开Chrome浏览器,找到需要抓取的网页

但是仅仅用url这一个参数还不能够得到网页的代码,还需要程序伪造成浏览器进行爬去,因此还要构造一个Headers作为参数和url一起传给requests,
打开索要抓取的网页然后按F12在Network中可以找到Headers的参数

找到Headers之后,就可以构造一个Headers的参数来传递给requests来伪造浏览器进行网页的抓取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
page_url = 'http://www.lofter.com/selection?id=1334100&type=2'
Header = {
'Accept':'',
'Accept-Encoding':'',
'Accept-Language':'',
'Cache-Control':'',
'Cookie':'',
'Host':'',
'Referer':'',
'Upgrade-Insecure-Requests':'',
'User-Agent':''
}

字典里的参数就是浏览器得到的参数(后来试了一下发现只要有Cookie好像就能抓到网页),这里就不把参数贴出来了,不同的电脑参数应该是不一样的。

然后就是网页的抓取

1
2
html = requests.get(url=page_url, headers=Header)
soup = BeautifulSoup(html.text,'html.parser')

抓取到所需要的页面之后然后开始在页面中找到我们想要的图片的地址信息
首先找到所有照片的页面标签

然后在找到单独每个照片的标签

然后用BeautifulSoup找到相应的标签

1
pics = soup.find('div',class_='m-bd').find_all('div',class_='img')

打印得到的pics可以看到img标签中的src便是图片的地址

然后再获得标签中的信息,并且发现src中’?’之前的便是图片的地址,因此获取图片的地址

1
pic_url = i.find('img')['src'].split('?')[0]

打印pic_url可以得到

我们已经得到了图片的地址,下面就是获取图片的信息并且保存在本地

1
2
3
4
img = requests.get(pic_url)
f = open('img/' + str(count) + '.jpg', 'ab')
f.write(img.content)
f.close()

其中count是一个计数器并且为保存的照片命名。

最终打开文件夹,发现图片已经保存在了本地

类似的方法还可以获取年度热门绘画作品,年度热门美食作品,年度热门旅行作品等等

仔细看一下这些照片的质量还是蛮高的,完全可以拿来当壁纸用~哈哈