如何用python爬取校花图片并保存到本地来?

  1. 获取什么数据?

    校花名字  name

    校花所在学校 school

    校花图片的url   img_ulr

  2.如何获取?

    打开网页http://www.xiaohuar.com/hua/ ,打开开发工具,研究每一张图片对应的html,找规律

    通过python 的scrapy框架进行批量爬取

环境声明:

  python 3.50

  scrapy 库

出现了哪些问题?

  1. 如何去除重复的url?

    通过对获取的url 进行md5,进行去重

  2. 如何该网站上所有的校花信息?

    先获取网页上所有的a标签,通过递归去取其他内容

  3. 如何内容永久化?

    写入文件,数据库等,该爬校花图片程序,我选择写入文件保存

如何创建与逻辑处理?

  1. 新建爬虫项目

    scrapy startproject pa_girls  (通过命令行)

  2. spiders 目录下,建立 一个叫 、school_girls.py文件

    在school_girls.py文件中写入:

  1. #!/usr/bin/python3
  2.  
  3. import scrapy
  4. from scrapy.selector import HtmlXPathSelector
  5. import hashlib
  6. # 把item模块添加到环境变量
  7. from items import Pa1Item
  8.  
  9. # # 最终获取信息列表
  10. # school_girl = []
  11.  
  12. # 获得总url,目的去重
  13. all_urls = {}
  14.  
  15. class SchoolGirls(scrapy.Spider):
  16. name = 'school_girls'
  17. # 初始url,依次
  18. start_urls = [
  19. 'http://www.xiaohuar.com/hua/',
  20. ]
  21.  
  22. def parse(self, response):
  23. # 爬虫主体
  24. try:
  25. # 找标签
  26. hxs = HtmlXPathSelector(response)
  27. girls = Pa1Item()
  28. # 获取标签中指定数据
  29. school = hxs.select('//div[@class="img"]/div[@class="btns"]/a/text()').extract()
  30. name = hxs.select('//div[@class="img"]/span[@class="price"]/text()').extract()
  31. img_url = hxs.select('//div[@class="img"]/a/img/@src').extract()
  32. if school and name and img_url:
  33. girls['school'] = hxs.select('//div[@class="img"]/div[@class="btns"]/a/text()').extract()
  34. girls['name'] = hxs.select('//div[@class="img"]/span[@class="price"]/text()').extract()
  35. girls['img_url'] = hxs.select('//div[@class="img"]/a/img/@src').extract()
  36. yield girls
  37. else:
  38. pass
  39. #
  40. # 获取页面的所有连接
  41. page_urls = hxs.select('//a/@href').extract()
  42. page_urls.append('http://www.xiaohuar.com/hua/')
  43. # print(page_urls)
  44.  
  45. # 进行url去重
  46. url_list = {}
  47. for url in page_urls:
  48. if url.startswith('JavaScript') or url.startswith('#') or not url:
  49. continue
  50. else:
  51. m = hashlib.md5()
  52. m.update(bytes(url, encoding='utf-8'))
  53. img_id = m.hexdigest()
  54. # 判断是否重复url,重复就不需要再次访问
  55. if img_id in all_urls:
  56. continue
  57. else:
  58. all_urls[img_id] = url
  59. url_list[img_id] = url
  60.  
  61. # 递归查找该页面所有url
  62. for url in url_list.values():
  63. yield scrapy.Request(url=url, callback=self.parse)
  64. except Exception as e:
  65. print(e)

  3. 在 items.py文件中写入

  1. import scrapy
  2.  
  3. class Pa1Item(scrapy.Item):
  4. name = scrapy.Field()
  5. school = scrapy.Field()
  6. img_url = scrapy.Field()

  4. 在pipelines.py文件中写入

  1. import os
  2. import requests
  3.  
  4. class GirlsMessage(object):
  5. '''获取有效数据'''
  6. def process_item(self, item, spider):
  7. for i in range(len(item['name'])):
  8. if item['name'][i].strip() and item['school'][i].strip() and item['img_url'][i].strip():
  9.  
  10. # 把信息写入文件
  11. message_girls = item['name'][i] + '_' + item['school'][i] + ':' \
  12. + 'http://www.xiaohuar.com/' + item['img_url'][i]
  13. with open('E:\scrapy_new\img\message_girls.text', 'a+', encoding='utf-8') as f_girls:
  14. f_girls.write(message_girls)
  15.  
  16. # 下载图片
  17. img_path = os.path.join('E:\scrapy_new\img', item['name'][i] +'_' + item['school'][i] +'.jpg')
  18. img_url = 'http://www.xiaohuar.com/' + item['img_url'][i]
  19. try:
  20. img_date = requests.get(img_url).content
  21. with open(img_path, 'bw',) as f_img:
  22. f_img.write(img_date)
  23. f_img.flush()
  24. except Exception as e:
  25. print(e)
  26. return item

  5. 在setting文件中添加

  1. # 设置爬取深度
  2. DEPTH_LIMIT = 1
  3.  
  4. # 激活pipelines中类
  5. ITEM_PIPELINES = {
  6. 'pa_1.pipelines.GirlsMessage': 200,
  7. }

可能会出现哪些问题?

  1. items模块导入不了,如何解决

    在spiders目录下的__init__.py文件中加入:

  1. import os
  2. import sys
  3. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

 如何启动项目?

  scrapy crawl school_girls (需要在项目下,spiders目录下敲入命令)

python_爬校花图片的更多相关文章

  1. Python 爬虫 爬校花网!!

    爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 1.福利来了  校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易不会受到打击,第二呢 你懂得... 1.第一步,需要下载 ...

  2. 用python爬校花网

    import requests import re import hashlib,time def get_index(url): response=requests.get(url) if resp ...

  3. Scrapy爬虫框架之爬取校花网图片

    Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...

  4. scrapy爬取校花网男神图片保存到本地

    爬虫四部曲,本人按自己的步骤来写,可能有很多漏洞,望各位大神指点指点 1.创建项目 scrapy startproject xiaohuawang scrapy.cfg: 项目的配置文件xiaohua ...

  5. python实战项目 — 爬取 校花网图片

    重点: 1.  指定路径创建文件夹,判断是否存在 2. 保存图片文件 # 获得校花网的地址,图片的链接 import re import requests import time import os ...

  6. Go语言实战-爬取校花网图片

    一.目标网站分析 爬取校花网http://www.xiaohuar.com/大学校花所有图片. 经过分析,所有图片分为四个页面,http://www.xiaohuar.com/list-1-0.htm ...

  7. python爬虫基础应用----爬取校花网视频

    一.爬虫简单介绍 爬虫是什么? 爬虫是首先使用模拟浏览器访问网站获取数据,然后通过解析过滤获得有价值的信息,最后保存到到自己库中的程序. 爬虫程序包括哪些模块? python中的爬虫程序主要包括,re ...

  8. Java基础-爬虫实战之爬去校花网网站内容

    Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...

  9. 爬虫(猫眼电影+校花网+github+今日头条+拉钩)

    Requests+正则表达式爬取猫眼TOP100榜电影信息 MARK:将信息写入文件解决乱码方法,开启进程池秒爬. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

随机推荐

  1. Push to origin/master was rejected (Git提交错误)

    [问题描述] 在使用Git Push代码的时候,会出现 Push to origin/master was rejected 的错误提示. 在第一次提交到代码仓库的时候非常容易出现,因为初始化的仓库和 ...

  2. TypeScript体验

    TypeScript 在线玩 http://www.typescriptlang.org/play/index.html ts最终编译成js  网站最终还是要引用js.  ts面向对象的感念更加直观, ...

  3. 前端学习:html基础学习五

    9.HTML表单设计(主要内容<form><input><select>标记) 表单标记 <form>...</form> <form ...

  4. java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

  5. AOP---jdk动态代理的思考

    引出问题:动态代理中是谁调用了invoke方法 为了更好的说明情况,我先写一个动态代理类 a.Person类 public interface Person { public void eating( ...

  6. 全面总结: Golang 调用 C/C++,例子式教程

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  7. MongoDB(一)环境搭建与初始配置

    前言 最近的项目中需要用到MongoDB,所这段时间需要学习知道怎么去使用这个数据库. 这里我先简单的介绍一下什么是MongoDB,后面还会详细的介绍: MongoDB 是一个面向文档的通用型数据库, ...

  8. CTF---隐写术入门第一题 SB!SB!SB!

    SB!SB!SB!分值:20 来源: 西普学院 难度:中 参与人数:4913人 Get Flag:1541人 答题人数:1577人 解题通过率:98% LSB 解题链接: http://ctf5.sh ...

  9. 【Java学习笔记之八】JavaBean中布尔类型使用注意事项

    JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolea ...

  10. HDU4920-Matrix multiplication-矩阵乘法 51nod-1137 矩阵乘法

    先贴两个基础的矩阵乘法,以后再贴一些题. hdu. Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...