网络爬虫介绍

什么是爬虫

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

爬虫的用处

  • 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库模拟用户滑动解锁;对于更复杂的验证码可接入收费的打码平台。

你可能感兴趣的:(python,python爬虫,scrapy)