转载请注明出处https://www.cnblogs.com/alexlee666/p/10180519.html,谢谢! 文中图片来自于我的简书博客。

一、 爬虫用途和本质:

网络爬虫顾名思义即模仿?️在网络上爬取数据,网络爬虫的本质是一段自动抓取网页信息的计算机程序。爬虫实现方式:模仿浏览器访问互联网的过程,下载指定url网页的数据,然后解析并处理得到感兴趣的、有价值的数据。


二、何时使用爬虫框架?

针对不同的爬虫需求,爬虫的实现途径也不相同。对于比较大型或复杂的需求需要使用爬虫框架,因为框架便于管理和扩展等;而对于一般比较小型或简单的爬虫需求,那么使用框架就有点大材小用了,目前通常直接使用requests库 + bs4便可满足需求(requests与python request模块不是一回事,requests是一个基于urllib3的第三方库,bs4即python beautfilsoup组件)。


三、 爬虫系统基础框架:

一个爬虫系统的基础框架通常包含调度器scheduler、URL管理器manager、URL下载器downloader、URL解析器parser、应用application共5个模块。当然还可以根据任务的需求在基础框架的基础上添加扩展模块,比如监控模块、定时启动模块等。5个基础模块的功能如下:

调度器scheduler:负责协调各模块

url管理器manager:管理待爬取和已爬取的网页url

下载器downloader:根据url去爬取对应的网页数据,将网页数据转换成一个字符串(html文档等),常用的下载器包括urllib3、requests等

解析器parser:解析下载器下载得到的字符串,常用的解析器包括html.parser(Python自带的)、beautifulsoup(第三方插件)

应用程序application:分析感兴趣的、有价值的数据

工作流程如下图所示:


四、常用的爬虫框架:

前面已经提到过,爬虫框架适用于比较大型或复杂需求的爬虫,因为框架便于管理和扩展等。目前常用的几种爬虫框架包括:

Scrapy框架

PySpider框架

Crawley框架

Portia框架

Newspaper框架

尤其Scrapy框架和PySpider框架是比较受欢迎的爬虫框架。

Scrapy框架官方:https://scrapy.org/

PySpider框架官方:http://docs.pyspider.org


五、requests库 + bs4来实现简单爬虫

下面使用requests库 + bs4来实现简单爬虫并附上源码:

5.1 先明确要爬取的目标数据:

http://country.911cha.com/首页如下图所示:

查询‘中国’的页面(以中国为例)如下图所示:

要爬取的目标数据:各国对应页面的国旗图片(如图5-2中的五星红旗,大图)并保存到本地目录。

5.2 查看网页源码-分析图片所在的路径:

step 1.  要爬取国家A的国旗,首先需要知道国家A对应的url,分析“国家地区查询首页http://country.911cha.com/”的源码可知,国家A的url保存在图5-3所示的位置(比如中国就是CHN.html):

step 2.  获取到国家A的url后就可以使用下载器requests来爬取网页内容了,但是要获取网页内容中的国旗图片还需要知道该图片在该网页内容中所在的位置。分析国家A对应的网页(以中国为例)发现,国旗图片的位置如图5-4所示(选中的那行):

⚠️:图5-4中的simg/199.gif是另一个小图(位于蓝色字体国家名的下方),非目标图片。

到目前为止,就已经知道了国家A对应的url和国家A页面中国旗图片所在的位置,接下来就可以编写代码完成如下工作:

1. 使用requests下载网页数据

2. 使用beautifulsoup解析网页数据

3. 使用urllib根据指定的图片路径和本地保存路径下载图片


代码内容:


import requestsimport urllib.requestfrom bs4 import BeautifulSoup# 首页urlurl = 'http://country.911cha.com/'# requests下载器下载主页数据html = requests.get(url)# beautifulsoup解析主页数据soup = BeautifulSoup(html.text, "lxml")# 定位到‘ul’-无序列表(其中每个ul标签都包含了一个countryGroup,比如图5-1中的A组(按国家名拼音排序))countries = soup.find_all('ul', class_="l4 pt8 pb8")# 创建一个空list,里面元素是(imgUrl, imgName)html_countryName_Arr = list()# 遍历每个countryGroupfor countryGroup in countries:# 遍历countryGroup中的每个国家for country in countryGroup.children:# 这里遍历的原因是一个国家对应一个list:  <li><a href="ECU.html" target="_blank" class="f14">厄瓜多尔</a></li>        for x in country:# 读取其中的href和text内容并添加到 html_countryName_Arr中html_countryName_Arr.append((x.get("href"), x.text))# 逐个构建每个国家对应的url和image下载路径for name_html in html_countryName_Arr:print("(name, html): " + str(name_html))countryUrl = url + name_html[0]countryHtml = requests.get(countryUrl)countrySoup = BeautifulSoup(countryHtml.text, "lxml")# 查找每个国家页面中的img标签for imgTag in countrySoup.find_all('img'):# 定位国旗图片的标签if 'alt' in imgTag.attrs and 'align' in imgTag.attrs:if '国旗' in imgTag.get("alt"):imgName = imgTag.get("alt")imgSourceUrl = '%s%s' % (url, imgTag.get("src"))print(imgSourceUrl)imgSavePath = '/Users/ycaha/PYTHON_LEARNING/nationFlags/%s.jpg'%imgNameprint(imgSavePath)# 下载国旗图片到本地路径urllib.request.urlretrieve(imgSourceUrl, imgSavePath)

代码分析:

requests:下载器,html = requests.get(url)根据url下载网页数据;type(html)是<class 'requests.models.Response'>

BeautifulSoup:解析器,BeautifulSoup(html.text, "lxml")创建<class 'bs4.BeautifulSoup'>实例;其中html.text是获取response的内容,数据格式为string,查看html.text方法如下:

def text(self):"""Content of the response, in unicode... """

BeautifulSoup支持Python标准库中的HTML解析器html.parser,还支持一些第三方的解析器:

因此BeautifulSoup(html.text, "lxml")的功能是:使用lxml解析器来解析html文本,并返回beautifulsoup实例,该实例是指定url网页数据的另一种表现形式,接下来可以通过分析该实例的属性attributes来获取所需要的数据内容。

if 'alt' in imgTag.attrs and 'align' in imgTag.attrs:*if '国旗' in imgTag.get("alt"):*imgName = imgTag.get("alt")*imgSourceUrl = '%s%s' % (url, imgTag.get("src"))*

这段代码用来定位属性alt包含‘国旗’的图片并将其下载到本地路径。通过这种if条件定位国旗图片的原因在于国旗图片所在的标签内容为:

<p ><img src="bimg/199.gif" alt="中国国旗" align="right" class="pl8 pb8" /><strong ><font class="blue f24" >中国</font></strong>
</p >

soup.find_all('img')用来寻找html中所有标签为img对象,再寻找img对象中包含属性alt的img对象,再寻找属性alt中包含‘国旗’的img对象,最后使用urllib.request.urlretrieve(imgpath, savepath)将符合条件的图片下载到本地。


水平有限,有错误还请大家指正!转载请注明出处,https://www.cnblogs.com/alexlee666/p/10180519.html。谢谢支持!

转载于:https://www.cnblogs.com/alexlee666/p/10180519.html

爬虫系统基础框架 何时使用爬虫框架? requests库 + bs4来实现简单爬虫相关推荐

  1. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    一起学爬虫--通过爬取豆瓣电影top250学习requests库的使用 学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python req ...

  2. python新闻爬虫系统的功能_基于Scrapy框架的Python新闻爬虫

    一.开发背景 Python作为数据处理方面的一把好手,近年来的热度不断增长.网络爬虫可以说是Python最具代表性的应用之一,那么通过网络爬虫来学习Python以及网络和数据处理的相关内容可以说是再合 ...

  3. 网络爬虫学习2 - 爬取网页的通用代码框架、HTTP协议、Requests库的各种方法

    网络爬虫MOOC学习打卡 - 第二天 文章目录 网络爬虫MOOC学习打卡 - 第二天 一.爬取网页的通用代码框架 1.理解requests库的异常 2.Respones类提供了一个方法 -- r.ra ...

  4. Python爬虫从入门到精通─第2课 Requests库讲解

    本教程所有源码下载链接:share.weiyun.com/5xmFeUO 密码:fzwh6g 本教程版权归作者GitOPEN所有,转载请征求作者同意 本教程首发于GitOPEN's Home Requ ...

  5. python的requests库的添加代理_python爬虫之requests库使用代理

    python爬虫之requests库使用代理 发布时间:2020-03-25 17:00:54 来源:亿速云 阅读:110 作者:小新 今天小编分享的是关于python爬虫的requests库使用代理 ...

  6. python爬虫requests实战_Python爬虫之requests库网络爬取简单实战

    实例1:直接爬取网页 实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页 实例3 : 分析请求参数,构造请求参数爬取所需网页 实例4: 爬取图片 实例5: 分析请求参数,构造请求参数爬取 ...

  7. 爬虫笔记(一)——Requests库

    文章目录 写在前面 一.Requests库入门 1.Requests库的安装 (1)安装Requests库 (2)测试Requests库 2.Requests库的get()方法 (1) get()方法 ...

  8. 带你快速了解爬虫的原理及过程,并编写一个简单爬虫程序

    目录 前言 你应该知道什么是爬虫? 一.Scrapy的基本执行过程 二.Scrapy的实现 2.1Scrapy框架安装 2.2创建项目 (1)爬虫框架组件介绍 (2)控制台运行创建框架命令(spide ...

  9. 起点中文网爬虫实战requests库以及xpath的应用

    起点中文网爬虫实战requests库以及xpath的应用 知识梳理: 本次爬虫是一次简单的复习应用,需要用到requests库以及xpath. 在开始爬虫之前,首先需要导入这两个库 import re ...

最新文章

  1. MySQL8.0索引新特性:颠覆了我对索引的认知
  2. mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢?...
  3. HDU 6070 Dirt Ratio(线段树、二分)
  4. oracle12数据库安装步骤,ORACLE RAC 12C(12.2.0.1)数据库软件安装步骤
  5. 了解零信任-SDP关系
  6. MyBatis 实际使用案例-dataSource
  7. 计算机蠕虫是一个程序或程序系列,它采取截取口令并试图在系统中,计算机蠕虫病毒是一个程序或程序系列,它采取截取口令并试图在系统中做非法动作的方式直接攻击计算机。...
  8. mysql mongodb 事务_认识MongoDB 4.0的新特性——事务(Transactions)
  9. 调用GPU进行神经网络的训练 GPU环境的搭建
  10. 抄底指标:秘密买卖点
  11. 均值聚类散点图怎么画_用Excel制作一个漂亮的分类散点图
  12. python中-----数组中的排序
  13. Centos 7忘记密码,如何重置
  14. YQMKPAT(CAD图案填充插件)v2.1绿色版
  15. 4.3.2 信道编码 ——卷积码
  16. 【疑难杂症爆破委员会】UEFI Linux、Windows双系统,丢失Windows的efi文件导致找不到启动项(恢复Windows的efi文件)
  17. A股个股财报数据更全面啦!—股票数据远程下载服务升级
  18. 学python还是计算机三级,考试无忧全国计算机等级考试python(python二级证书有用吗)...
  19. thinkpad x12018换固态_ThinkPad X1 Carbon 2018.超强升级
  20. 如何制作一个简单的html网页

热门文章

  1. 将对象转为需要的数组形式
  2. oss 视频 转码_OSS 视频转码
  3. 国产PLC替代加速,物通博联助力企业数字化转型
  4. 字符串:“A123x456 17960? 302tab5876“, 将其中连续的数字作为整数依次放到数组arr,统计有多少整数,并输出
  5. 智能垃圾桶(十二)——电路图软件fritzing+raspberry pi pico(树莓派pico)
  6. 笔记整理——使用openssl编程
  7. html ul 位置上移,JS移动li行数据,点击上移下移(是位置的互换,不是top的偏移量改变)...
  8. c#读取CSV格式文件
  9. GNN Tensorflow packages
  10. 生活的理想就是为了理想的生活