资讯专栏INFORMATION COLUMN

网络爬虫介绍

sf190404 / 2424人阅读

摘要:什么是爬虫网络爬虫也叫网络蜘蛛,是一种自动化浏览网络的程序,或者说是一种网络机器人。

什么是爬虫

网络爬虫也叫网络蜘蛛,是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。简单来讲就是模拟浏览器请求网页。

爬虫的用处

Web爬虫作为搜索引擎的重要组成部分

建立数据集以用于研究,业务和其他目的。比如:
   ①收集营销数据,对营销方案决策提供辅助。
   ②分析网民对某件事物的评价,比如新闻事件、电影、书籍等。
   ③分析行业发展趋势,比如房价、薪资水平。
   ④社会计算方面的统计和预测,比如票房。

知识准备 http协议

常用的请求方法GET、POST等

常见的状态码200 OK、400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found、500 Internal Server Error、503 Server Unavailable等

常用的请求报头:

前端知识

对HTML、CSS、JavaScript等有一定的掌握

爬虫语言

选择爬虫用的语言,比如python, 掌握python的基本语法、包的下载与使用

爬虫的基本步骤

目标分析-》发送请求-》解析响应页面-》存储内容-》数据分析

python爬虫用到的库 请求库

requests: requests库是python的一个第三方请求库,基于urllib库(python用于HTTP请求的自带标准库)改写而成,因此相比urllib库requests更富人性化、便捷性,是爬虫逻辑中使用最频繁的HTTP请求库。

Selenium:一个自动化测试工具库,利用它可以执行浏览器特定的动作,比如跳转、输入、点击、下拉等。

aiohttp:提供异步Web服务,提高爬虫...

解析库

BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它将html的标签文件解析成树结构,然后方便的获取到指定标签的对应属性。BeautifulSoup除了支持Python标准库中的HTML解析器之外,还支持一些第三方的解析器,BeautifulSoup官方推荐使用lxml作为解析器。BeautifulSoup()的构造方法需要传入两个参数:

soup = BeautifulSoup("data","lxml") //第一个参数是一段网页代码或一个网页文件,第二个参数是解析网页的库,这里使用lxml库.
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象。
    ①Tag:Tag 对象与XML或HTML原生文档中的tag相同,比如soup.p表示p标签
    ②Attributes:一个tag可能有很多个属性. 比如

tag的属性的操作方法与字典相同: tag["class"]
    ③find()方法是找到文档中符合条件的第一个元素,直接返回该结果。元素不存在时返回None
    ④find_all()方法是找到文档中所有符合条件的元素,以列表的形式返回。元素不存在时返回空列表
    ⑥CSS选择器的使用方法与CSS定位标签的方式相似,主要有.class 和 #id

使用正则表达式,python中的re模块可使用正则表达式进行匹配。

pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析html文档

存储内容

数据库,如MySql、MongoDB

文件

数据分析库

jieba:是目前最好的 Python 中文分词组件,支持 3 种分词模式:精确模式、全模式、搜索引擎模式,同时支持繁体分词、自定义词典。

numpy:高性能科学计算和数据分析的基础包,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

pandas:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

matplotlib 数据可视化工具,可生成各种2D图像。

简单示例 环境搭建

安装python3.6.5

使用pip install xx 命令依次安装requests、lxml、beautifulsoup4、jieba、numpy、pandas、matplotlib、wordcloud

初阶爬虫示例介绍

爬取豆瓣上关于《权力的游戏第七季》的所有短评

    requrl = "https://movie.douban.com/subject/" + movieId + "/comments" +"?" +"start=" + str(start) + "&limit=20" 
    response = requests.get(requrl) #发送请求
    if response.status_code == 200:
        html = response.text   # 获取响应html内容  
        soup = BeautifulSoup(html, "lxml") # 构建BeautifulSoup对象,使用lxml作为解析器 
        comment_div_lits = soup.find_all("div", class_="comment")   # 找到对应标签及属性
        for item in comment_div_lits: # 循环
            comment = item.find_all("span", class_="short")[0].string # 获取评论内容
            eachCommentList.append(comment) # 添加到list列表
        return eachCommentList # 返回列表
爬虫框架scrapy

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛,用户只需要定制开发几个模块就可以轻松的实现一个爬虫。Scrapy 使用了 Twisted"twɪstɪd异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

scrapy组件列表

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。

Spider Middlewares(Spider中间件):介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

scrapy运行流程

1、引擎启动触发事务

2、引擎从调度器中取出一个链接(URL)用于接下来的抓取

3、引擎把URL封装成一个请求(Request)传给下载器

4、下载器把资源下载下来,并封装成应答包(Response)

5、爬虫解析Response

6、解析出的实体(Item),则交给实体管道进行进一步的处理

7、解析出的是链接(URL),则把URL交给调度器等待抓取

创建项目步骤

1、使用pip install xx命令安装scrapy、Twisted(异步网络框架处理网络通讯)

2、进入您打算存储代码的目录中,运行下列命令:scrapy startproject tutorial # tutorial为项目名称,自行定义

该命令将会创建包含下列内容的 tutorial 目录:

tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

这些文件分别是:

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块

tutorial/items.py: 项目的目标实体文件

tutorial/pipelines.py: 项目的管道文件.

tutorial/settings.py: 项目的设置文件.

tutorial/spiders/: 存储爬虫代码目录

spiders目录下新建爬虫文件:

import scrapy

class testSpider(scrapy.Spider):
    name = "tutorial"
    allowed_domains = ["baidu.com"]
    start_urls = (
        "https://www.baidu.com/",
    )

    def parse(self, response):
        pass 
反爬虫与反反爬虫介绍 常见的反爬虫 1、通过网页的请求头

User-Agent:这个是保存用户访问该网站的浏览器的信息,例如Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36,requests库本身的headers里没有User-Agent,所以网站可以拒绝掉没有User-Agent或者频繁使用一个User-Agent的请求。

Referer:当浏览器发送请求时,一般都会带上这个,表示当前请求是由哪个链接进来的。网站也可以拒绝没有Referer或者频繁使用同个Referer的请求。

authorization:有的网站还会有这个请求头,这个是在用户在访问该网站的时候就会分配一个id给用户,然后在后台验证该id有没有访问权限从而来进行发爬虫。

2、用户访问网站的ip

当不断地使用一个ip来访问一个网站时,网页后台也会判断你是一个机器,把你的ip封掉。

3、验证码

当频繁请求一个网址,比如登录时,会出现验证码。

反反爬虫策略 1.添加请求头

在请求头headers添加请求头,比如可以网上找别人整理的User-Agent列表,请求时从列表里随机取出使用。

2.使用代理ip

网上有一些免费的代理ip,比如https://www.xicidaili.com/等,但使用的人太多了也经常被封掉,可以自己爬取一些免费代理ip建成ip池,请求的时候从ip池随机取出使用。也可以购买付费的ip,质量比较高。

3.处理验证码

对于比如登录时只要验证一次的简单图片验证码,可以把验证码图片下载下来,手动输入;对于类似滑块验证码,可以用selenium库模拟用户滑动解锁;对于更复杂的验证码可接入收费的打码平台。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43745.html

相关文章

  • Python3网络爬虫实战---10、爬虫框架的安装:PySpider、Scrapy

    摘要:所以如果对爬虫有一定基础,上手框架是一种好的选择。缺少包,使用安装即可缺少包,使用安装即可上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---9、APP爬取相关库的安装:Appium的安装下一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis 我们直接...

    张宪坤 评论0 收藏0
  • 爬虫入门

    摘要:通用网络爬虫通用网络爬虫又称全网爬虫,爬取对象从一些种子扩充到整个。为提高工作效率,通用网络爬虫会采取一定的爬取策略。介绍是一个国人编写的强大的网络爬虫系统并带有强大的。 爬虫 简单的说网络爬虫(Web crawler)也叫做网络铲(Web scraper)、网络蜘蛛(Web spider),其行为一般是先爬到对应的网页上,再把需要的信息铲下来。 分类 网络爬虫按照系统结构和实现技术,...

    defcon 评论0 收藏0
  • 爬虫入门

    摘要:通用网络爬虫通用网络爬虫又称全网爬虫,爬取对象从一些种子扩充到整个。为提高工作效率,通用网络爬虫会采取一定的爬取策略。介绍是一个国人编写的强大的网络爬虫系统并带有强大的。 爬虫 简单的说网络爬虫(Web crawler)也叫做网络铲(Web scraper)、网络蜘蛛(Web spider),其行为一般是先爬到对应的网页上,再把需要的信息铲下来。 分类 网络爬虫按照系统结构和实现技术,...

    Invoker 评论0 收藏0
  • 精通Python网络爬虫(0):网络爬虫学习路线

    摘要:以上是如果你想精通网络爬虫的学习研究路线,按照这些步骤学习下去,可以让你的爬虫技术得到非常大的提升。 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多,而爬虫是一种很好的自动采集数据的手段。 那么,如何才能精通Python网络爬虫呢?学习Python网络爬虫的路线应该如何进行呢?在此为大家具体进行介绍。 1、选择一款合适的编程语言 事实上,Python、P...

    spacewander 评论0 收藏0

发表评论

0条评论

sf190404

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<