用爬虫竟然得到了所在学学同学的照片,还帮助哥们儿追其他系的女孩。

–引自 《python 3 网络爬虫开发实战》序言

1. 不会python怎么爬

听别人说爬虫,自己也一直想学学,苦于没弄过python,一直没有付诸行动。虽然通过别的语言也可以实现,总的原理就是获取网页内容、解析、存储,但现在好像说爬虫不用python就“不正宗”似的。

弄了本《python 3 网络爬虫开发实战》看看,在序言里就看到了这样一段话。大概浏览了一下书的内容,觉得是不是可以不学python,直接开始配环境,装框架,通过配置的方式达到目的。 **毕竟不是想做python专职开发,**只是想“爬一爬”,通过学习爬虫,顺带学一些python的知识。

不过一定要注意,不让爬的一定不能爬,爬公开的内容也要注意,尽量降低频率,像正常访问一样,别给人家服务器造成压力。

2. 我也去大学爬点“风景”

作者爬过的大学我就不爬了,突然脑子里就冒出来了山大,那就去看看,在官网菜单中大概浏览了一下,还真找到了,上地址:https://culture.sdu.edu.cn/sdyx/zxxq/17.htm

F12看一下HTML

结构比较简单,非常符合作为菜鸟的我开始学习的样例。

3. 安装python环境

安装环境及相关插件就全部采用最新版本吧,官网地址:https://www.python.org/

下载对应系统安装包,本文以Windows下为例,目前最新版本为3.10.1

双击下载的python-3.10.1-amd64.exe文件开始安装。

勾选Add Python 3.10 to PATH, 添加对应的环境变量。

因为默认安装在AppData,改一下,选择Customize installation,进入下一步:

保持默认,继续下一步,

修改安装地址。点击Install按钮开始安装。

4. 安装Scrapy

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

4.1 安装依赖

依次执行如下命令,安装依赖,类似其他包管理器一样

pip3 install lxml
pip3 install pyOpenSSL
pip3 install Twisted
pip3 install pyWin32

下载速度不快,慢慢等等安装完成即可:

4.2 安装Scrapy

通用采用pip3命令安装:

pip3 install Scrapy

5. 创建Scrapy项目

执行scrapy startproject GetPhotos命令创建一个项目,名称暂定为“GetPhotos”

F:\>scrapy startproject GetPhotos
New Scrapy project 'GetPhotos', using template directory 'C:\Python310\lib\site-packages\scrapy\templates\project', created in:F:\GetPhotosYou can start your first spider with:cd GetPhotosscrapy genspider example example.com

创建成功,在当前目录创建了一个以项目名名称的文件夹。并且给出了下一步的提示。

文件内容如下:

里面还有个同名”GetPhotos“的文件夹.

现在需要做一些配置性的工作,可以考虑用xcode打卡此目录,方便修改文件。(建议安装python插件)

5.1 修改Item字段

有个items.py文件,带如下

import scrapyclass GetphotosItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()pass

我将它理解为Model,一个实体类贯穿全场,给他添加三个字段

class GetphotosItem(scrapy.Item):name = scrapy.Field()time = scrapy.Field()src = scrapy.Field()

分别用于存储图片的标题、时间和原始地址。

5.2 创建spider

进入项目目录:

cd GetPhotos

创建spider

scrapy genspider GiveMePhotos culture.sdu.edu.cn

可以看到spiders文件夹下多了一个名为GiveMePhotos.py的文件,其内容如下

import scrapyclass GivemephotosSpider(scrapy.Spider):name = 'GiveMePhotos'allowed_domains = ['culture.sdu.edu.cn']start_urls = ['http://culture.sdu.edu.cn/']def parse(self, response):pass
  • name: spider的名称
  • allowed_domains: 允许爬的域名
  • start_urls:起始地址
  • parse方法:即处理请求结果的方法

start_urls肯定要改成我们的目标地址:https://culture.sdu.edu.cn/sdyx/zxxq/17.htm

然后就是分析这个网页的元素,即parse方法,修改后的代码如下

import scrapyclass GivemephotosSpider(scrapy.Spider):name = 'GiveMePhotos'allowed_domains = ['culture.sdu.edu.cn']start_urls = ['https://culture.sdu.edu.cn/sdyx/zxxq/17.htm']def parse(self, response):ul = response.css('.case_list_ul').xpath('./li')for li in ul:item = Test1Item()item['name'] = li.xpath('./div/span[1]/text()').extract_first()item['time'] = li.xpath('./div/span[2]/text()').extract_first()item['src'] = response.urljoin(li.xpath('./div/div/img/@data-original').extract_first()) yield item

如果用过jQuery应该很容易理解这段代码,无非就是找到li标签,循环遍历,然后再提取对应的节点。最终将解析的内容给item实体。

5.3 下载图片

scrapy框架提供了相应的下载组件,如果不需要图片处理,用普通的文件下载FilesPipeline就行了,如果需要处理可以采用ImagessPipeline,这次只要下载就行了,修改pipelines.py文件

from scrapy.pipelines.files import FilesPipeline
import scrapyclass GetphotosPipeline(FilesPipeline):def file_path(self, request, response=None, info=None, *, item=None):#return request.url.split('/')[-1]return item['name'] + ".jpg"def get_media_requests(self, item, info):yield scrapy.Request(item['src'])

代码含义是:

  • 定义一个GetphotosPipeline类,继承自FilesPipeline
  • 重写file_path方法,这是一个用于指定文件名的方法,可以通过Url截取,我试着用标题作为文件名。
  • 重写get_media_requests方法,调用Request方法下载

5.4 项目配置

  • 修改settings.py, 设置下载文件存放目录。

在settings.py中添加一行:

FILES_STORE = './imgs'

设置为子目录imgs。

  • 设置FilesPipeline

找到ITEM_PIPELINES节点,

ITEM_PIPELINES = {'GetPhotos.pipelines.GetphotosPipeline': 300,
}

默认是用“#”号注释掉的,去掉注释。

6. 运行获取结果

执行命令:

scrapy crawl GiveMePhotos

在命令窗口可以看到爬虫启动、获取结果直到自动结束的过程。

项目目录自动多了一个imgs文件夹,如下图

7. 总结

至此,一个简要的爬虫就完成了,虽然实现的功能比较简单,但也可以说有一定的收获。

  • 大概熟悉了scrapy框架,它提供了好多现成的组件。
  • 进一步了解了爬虫的工作过程,为实现更复杂的功能打下基础。

虽然是本文篇幅也不算太短了,但实际上大部分都是在做安装配置的工作,实际上涉及python语法的都很少。

思考:如何自动翻页下载下一页呢?

注意:虽然是公开内容,但一定要慢慢爬。且此过程仅供学习,爬取内容不可作为其他用途。

不会python,也可以开始爬虫相关推荐

  1. python爬虫小说代码示例-中文编程,用python编写小说网站爬虫

    原标题:中文编程,用python编写小说网站爬虫 作者:乘风龙王 原文:https://zhuanlan.zhihu.com/p/51309019 为保持源码格式, 转载时使用了截图. 原文中的源码块 ...

  2. python初学者web还是爬虫-还在纠结学爬虫还是数据分析,不如看看这篇文章

    原标题:还在纠结学爬虫还是数据分析,不如看看这篇文章 身为职场人,收集上万条表格数据做商业分析,裁剪上千张图片,发送数百封邮件...这些都是经常会遇到的场景.我一直期待能有个工具解放我,直到我遇到了P ...

  3. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

  4. python中国大学排名爬虫写明详细步骤-python中国大学排名爬虫

    python 中国大学排名爬虫 首先,给一个最好大学网URL:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html, 点击这里进入 . 功能描述 ...

  5. php和python写爬虫-一个简单的Python写的XML爬虫

    一个简单的Python写的XML爬虫 来源:程序员人生 发布时间:2013-11-06 16:22:29 阅读次数:1578次 原理很简单,读XML结构,返回值,判断,根据返回的值得到下一个XML的地 ...

  6. python多线程爬虫实例-python支持多线程的爬虫实例

    python是支持多线程的, 主要是通过thread和threading这两个模块来实现的,本文主要给大家分享python实现多线程网页爬虫 一般来说,使用线程有两种模式, 一种是创建线程要执行的函数 ...

  7. python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战

    ● 案例完整 本书中的所有案例都是通过"理论讲解 + 环境搭建 + 完整代码及分析 + 运行结果"这种完善的结构进行讲解的.此外,复杂的案例配有项目结构图,有难度的案例还分析了底层 ...

  8. 七月在线python数据分析_七月在线Python基础+数据分析班+爬虫项目

    资源介绍 七月在线Python基础+数据分析班+爬虫项目 目录 ├─Python基础入门班2017年 ││代码.rar │└─视频 │xa0 xa0 01.第1课 入门基础.rar │xa0 xa0 ...

  9. Crawler之Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息

    Crawler之Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 import scrapy class Dmoz ...

  10. python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...

    豆瓣Python大牛写的爬虫学习路线图,分享给大家! 今天给大家带来我的Python爬虫路线图,仅供大家参考! 第一步,学会自己安装python.库和你的编辑器并设置好它 我们学习python的最终目 ...

最新文章

  1. live的domain服务
  2. 以往计算机二级c语言填空题,计算机二级C语言考试填空题精选4
  3. 骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)
  4. 北京内推 | 联想研究院机器学习团队招聘因果推理算法研究实习生
  5. php 正则表达式提取出合法的时间_PHP正则表达式核心技术完全详解 第1节
  6. 100内奇数之和流程图_JavaScript基础教程(六)流程控制之循环语句
  7. 均匀分布(uniform distribution)期望的最大似然估计(maximum likelihood estimation)
  8. 微信小程序教程、微信小程序开发资源下载汇总(6.16日更新,持续更新中……)
  9. Raywenderlich: 用 VFX 制作蝴蝶飞起的效果
  10. java算法一个岛屿上一个说真话 一个说假话_面试常问智力题40道(逻辑题)+ 参考答案...
  11. 2018 百度之星 初赛 第六题 HDU6349
  12. 消息中间件RabbitMQ
  13. 054.CSS网页布局
  14. 使用DCDC升压电路——MT3608芯片
  15. REXROTH力士乐柱塞泵A10VSO100DRS/32R-VPB12N00
  16. daocloud mysql_DaoCloud Services 开放 API
  17. 好强型性格分析,如何改变好强型性格?
  18. 巡风xunfeng代码研究---核心模块深入分析--搜索和搜索结果
  19. 四川大学计算机应用,四川大学计算机应用技术考研
  20. 2019年浙江大学计算机学院的考研经验

热门文章

  1. css 文本超出就隐藏并且显示省略号
  2. 2019年云化国际发展趋势_2019年3种令人惊讶的云趋势-您首先在这里听到了
  3. “奈雪们”的瓶装茶饮,是门好生意吗?
  4. 团队协助 开源项目_Open Atrium 是一套开源的团队协作和知识管理系统
  5. /usr/bin/ld:cannot find -lxxx通用解决办法
  6. Unity3D官方教程爬坑
  7. qt :C4819 著名错误
  8. Excel如何实现两个工作表数据的对比
  9. RabbitMQ与Erlang版本对应关系
  10. 元学习兴起,卷积“落幕” | NeurIPS2020研究趋势总结