看见有意思的图片想保存到本地,可以用 python 进行批量爬取下载,以下代码以煎蛋网(http://jandan.net/)为例,对煎蛋网的某一页面进行爬取。
库介绍
python 自带标准库:urllib
(用于下载文件)
python 第三方库:BeautifulSoup
(解析 html 代码)
Requests
(用于向服务器请求资源 )
伪装
现在的许多网站都有自己的一套反爬机制,但因为小网站的反爬机制不高,所以做个初级伪装就可以开始爬取数据了,爬虫中常用的手段就是伪装成一个浏览器,在浏览器中打开网站调试工具找到需要的 User-Agent
和 Cookie
,构造成一个字典:
import requests,urllib
from bs4 import BeautifulSoup
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Cookie': 'jdna = 01b0531fab6a989460dd1b231010b496 #1492434771779; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1492430829,1492430927,1492430979; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1492434773; _ga=GA1.2.1686071134.1492430830; _gat=1'}
作为下面代码的参数传入。
向网站发起请求
url = 'http://jandan.net/ooxx/page-0'
code = requests.get(url,header)
get 函数传入两个参数,第一个是网站的 url ,第二个是伪装成浏览器的字典参数。
解析
请求发送完毕后,服务器给我们返回一堆信息,有状态码,有网页实体内容等,下面开始解析:
plain_text = code.text
Soup = BeautifulSoup(plain_text, 'lxml') # 实例化解析器Soup
download_links = []
folder_path = 'C://Users/Stone/Desktop/jiandan/' # 存储位置
for pic_tag in Soup.select('p > img'): # 获取图片下载链接
pic_link = 'http:' + pic_tag.get('src') # 拼接下载链接
download_links.append(pic_link) # 存入列表
这段代码中,实例化 html 解析器,然后将每张图片的地址给保存在一个列表里,其中采用了 bs4
中的 select()
方法,寻找所有具有 p > img
结构的标签。
开始下载 & 成果展
for item in download_links:
urllib.urlretrieve(item, folder_path + item[-10:])
print '此页面下载完成!'
其中用到的是标准库 urllib
的 urlretrieve()
方法,进行下载操作,第一个参数是图片 url ,第二个参数是文件名。下载结果如下:
参考资料:
BeautifulSoup 中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
Requests 中文文档:http://cn.python-requests.org/zh_CN/latest/