爬虫自动抓取壁纸
最近发现电脑桌面屏保需要大量壁纸来轮换,可是电脑里并没有这么多图片,于是决定写个小爬虫抓一点壁纸来用.在网上随便翻了个壁纸网站,就开干了. 爬虫用到了python的requests库和lxml库,需要额外安装.
分析过程
首先打开网站的主页面,可以看到有许多的图片,我比较喜欢风景图,于是切换到风景选项.
点击进入某个图片,并查看该页面的源代码
很容易看到,图片的url地址就在class为photo-pic的div标签的里面. 所以只需要分别进入每个图片的页面并提取出这个url就行了. 不过分别进入每个图片的链接在哪呢.于是再次查看初始页面的源码.
很显然,class为clearfix的ul标签中的每个li标签都有一个a标签, 其中的href属性便是跳转到相应的图片页面的url. 万事具备,只欠敲代码了.
实现过程
完整代码
import requests
from lxml import etree
import time
n = 1 #图片序号
url = 'http://pic.netbian.com/4kfengjing/'
headers = {
'Referer': 'http://pic.netbian.com/4kfengjing/',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
head_url = 'http://pic.netbian.com'
url_list = []
def get_one_page(url):
try:
begin_page = requests.get(url, headers=headers) #获得初始页面的数据
begin_page.raise_for_status()
html_begin = etree.HTML(begin_page.text)
result_begin = html_begin.xpath('//ul[@class="clearfix"]/li/a/@href') #解析出每个图片页面的url
for html_url in result_begin:
all_url = head_url + str(html_url)
photo_page = requests.get(all_url,headers=headers)
photo_html = etree.HTML(photo_page.text)
photo_url = photo_html.xpath('//div[@class="photo-pic"]/a/img/@src') #解析出每个图片的地址
real_url = head_url + str(photo_url[0]) # 拼接出完整的图片地址url
url_list.append(real_url) #将每个图片url添加到url_list中
time.sleep(0.5)
except:
print("error")
def download_photo(list): #从url_list中读取每个图片url并将其保存到文件中
global n
for url in list:
r = requests.get(url, headers=headers)
with open('photo/'+str(n)+'.jpg','wb') as f:
f.write(r.content)
print('下载完成')
n = n + 1
time.sleep(0.5)
def main():
print('正在抓取链接中...')
for i in range(2,30): #可自行修改爬取多少页
url_append = "index_{}.html".format(i)
url = 'http://pic.netbian.com/4kfengjing/' + url_append
get_one_page(url)
download_photo(url_list)
if __name__ == '__main__':
main()