大数据挖掘—(十):爬取校花照片,并保存到本地

通过往期的文章,我们可以爬取网页上面的文字信息,本期介绍一下如何爬取图片信息,以及保存图片到本地。

建立爬虫

我们以校花网为爬取对象,爬取图片信息:http://www.xiaohuar.com

class PowersSpider(scrapy.Spider):
 name = "xiaohua" # 爬虫的名字
 allowed_domains = ["xiaohuar.com"]
 # 定义第一个URL
 first_url = 'http://www.xiaohuar.com/list-1-1.html'
 def start_requests(self):
 # 返回调度器处理好的request
 yield Request(self.first_url, self.parse)

定义好爬虫的基本信息后,定义prase函数来处理爬虫信息

def parse(self, response):
 tds = BeautifulSoup(response.text, 'lxml').find_all(class_='img')
 item = PowersItem_xiaohua() # item初始化
 # print(tds)
 for td in tds:
 name = td.find_all('a')[0].find('img')['alt']
 address = td.find_all('a')[0].find('img')['src']
 address = 'http://www.xiaohuar.com' + address
 item['name'] = name
 item['address'] = address
 yield item

通过查看网页信息,可以很清楚的知道我们爬取照片的信息,在照片信息里面有一个图片地址,但是这并不是图片的真正地址,图片的真正地址需要加上校花网的主页地址,当你把这个真正的图片地址输入浏览器时,就可以很清楚的看到图片的原图了,右击可以另存为,但是我们不会一个一个照片的保存

保存照片到本地

scrapy自带图片保存的中间组件,但是使用起来,比较麻烦,我们自己写pipeline来保存照片

class Powerspipeline_xiaohua(object):
 def process_item(self, item, spider):
 headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
 if isinstance(item, PowersItem_xiaohua):
#请求网页
 req = urllib.request.Request(url=item['address'], headers=headers)
#打开网页
 res = urllib.request.urlopen(req)
#保存图片,并修改图片的名字
 file_name = os.path.join(r'D:\foxtable\picture', item['name'] + '.jpg')
 with open(file_name, 'wb') as fp:
 fp.write(res.read())#保存图片
 else:
 print('no find items')
 return item

python自带urllib,也可以使用urllib来做爬虫,在此我们定义 了一个headers

headers:

在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问,来避免这一问题。

美女照片

运行以上代码,就可以把美女照片全部保存到本地了

本期只是爬取了一个界面,网友们可以参考往期的文章,爬取更多的界面,以便保存更多的美女照片。

下期分享:

下期我们分享一下如何爬取音乐文件

谢谢大家的点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!