大数据挖掘—(十):爬取校花照片,并保存到本地
通过往期的文章,我们可以爬取网页上面的文字信息,本期介绍一下如何爬取图片信息,以及保存图片到本地。
建立爬虫
我们以校花网为爬取对象,爬取图片信息: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可以将自己的爬虫脚本伪装成浏览器的正常访问,来避免这一问题。
美女照片
运行以上代码,就可以把美女照片全部保存到本地了
本期只是爬取了一个界面,网友们可以参考往期的文章,爬取更多的界面,以便保存更多的美女照片。
下期分享:
下期我们分享一下如何爬取音乐文件
谢谢大家的点赞与转发,关于分享的文章,大家有任何问题,可以在评论区一起探讨学习!!!