python爬虫一:数据采集

515次阅读
没有评论

文章目录

  • 爬虫简介
      • 简单爬虫小案例: 实现一个图片下载器
  • 网络数据采集之requests库(常用)
      • 小练习:使用get与post方法实现爬取
  • 反爬小技巧
      • 一: 添加 headers
      • 二:IP代理设置
      • 小练习:有道搜索关键词提交

爬虫简介

一、根据使用场景,网络爬虫可分为:通用爬虫 和 聚焦爬虫两种:

  • 通用爬虫:
  • 通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分;
  • 主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份;
  • 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着 整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
  • 搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。
    rel=“nofollow”,告诉搜索引擎爬虫无需抓取目标页,同时告诉搜索引擎无需将的当前页的Pagerank传递到目标页.
    Robots协议(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
  • 通用爬虫的局限性
    大多情况下,网页里90%的内容对用户来说都是无用的。
    搜索引擎无法提供针对具体某个用户的搜索结果。
    图片、数据库、音频、视频多媒体等不能很好地发现和获取。
    基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
    • 聚焦爬虫(重点)
  • 聚焦爬虫,是 “面向特定主题需求” 的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
  • 二、 网络爬虫抓取过程可以理解为模拟浏览器操作的过程。

    • 要重点理解,当用户输入一个URL后,发生了什么:

    一、浏览器获取资源的过程:
    1、输入url
    2、浏览器解析url,获得主机名
    3、将主机名转换成服务器ip地址(查找本地DNS缓存列表,如果没有则向默认的DNS服务器发送查询请求)
    4、浏览器建立一条与服务器的TCP连接(三次握手)
    5、浏览器向服务器发送http请求
    6、服务器向浏览器返回请求响应
    7、浏览器关闭连接,并解析文档
    8、如果文档中有资源,则重复6/7/8
    二、浏览器渲染页面的过程:
    1、html生成dom tree
    2、css生成 style rules
    3、dom 树与style rules 结合生成render tree
    4、布局:计算每个节点的信息
    5、绘制:根据计算的信息,渲染页面

    • 重点理解GET和POST方法:

    GET是从服务器上获取数据,POST是向服务器传送数据
    GET请求参数显示,都显示在浏览器网址上,即“Get”请求的参数是URL的一部分。
    POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,

    • Cookie和Session

    服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
    Cookie:通过在客户端记录的信息确定用户的身份。
    Session:通过在服务器端记录的信息确定用户的身份。

    简单爬虫小案例: 实现一个图片下载器

    爬虫步骤分析
    1.
    需求分析: http://image.baidu.com/search/index?tn=baiduimage&word=cat
    想要某个网站的图片,不用自己去搜索,还能自动下载
    2. 分析网页源代码,检查元素
    3. 编写正则表达式或者其他解析器代码
    4. 存储数据到本地
    5. 正式编写python爬虫代码

    分析网页源代码:
    python爬虫一:数据采集
    代码地址:百度图片下载器地址

    网络数据采集之requests库(常用)

  • requests官方网址
  • request方法如下:
    python爬虫一:数据采集
  • response对象
    Response对象包含服务器返回的所有信息,也包含请求的Request信息。
    python爬虫一:数据采集
  • 小练习:使用get与post方法实现爬取

    自己写一个服务器来测试,使用requests的get与post方法爬取网址信息
    代码地址如下:
    服务器终端测试代码
    客户端测试代码

    反爬小技巧

    一: 添加 headers

    有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错。

    headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'} response = requests.get(url, headers=headers)

    然而,UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,频繁更换UserAgent可以避免触发相应的反爬机制。fake-useragent对频繁更换UserAgent提供了很好的支持,可谓防反扒利器。

    UserAgent实质上是从网络获取所有的用户代理, 再通过random随机选取一个用户代理。
    使用fake-useragent部分代码如下:

    from fake_useragent import UserAgent ua = UserAgent() # 从网络获取所有的用户代理 print(ua.random) #可以随机拿出一个用户代理 headers = {'user_Agent': ua.random} response = requests.get('http://127.0.0.1:5000', headers=headers)

    二:IP代理设置

    在进行爬虫爬取时,有时候爬虫会被服务器给屏蔽掉,这时采用的方法主要有降低访问时间,通过代理IP访问。ip可以从网上抓取,或者某宝购买。比较有名的一个免费的IP代理是:ipipgoIP代理
    使用IP代理部分代码如下:

    import requests from fake_useragent import UserAgent

    ua = UserAgent() proxies = { 'http': 'http://222.95.144.65:3000', 'https': 'https://182.92.220.212:8080' } response = requests.get('http://47.92.255.98:8000', headers={'User-Agent': ua.random}, proxies=proxies )

    如果代理IP使用次数过高则会出现如下报错,需要重新换一个代理IP去设置
    requests.exceptions.ProxyError: HTTPConnectionPool(host=‘222.95.144.65’, port=3000): Max retries exceeded with url: http://47.92.255.98:8000/ (Caused by ProxyError(‘Cannot connect to proxy.’, NewConnectionError(’<urllib3.connection.HTTPConnection object at 0x000001F379E31B70>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’)))

    小练习:有道搜索关键词提交

    需求分析:通过输入要搜索的关键字,获取页面并将页面保存到本地。
    代码地址:有道词典关键字搜索页面结果代码
    结果展示:输入apologize 后,将获取到的页面存入本地,打开本地的html
    python爬虫一:数据采集

    神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

    相关文章:

    版权声明:Python教程2022-10-27发表,共计3270字。
    新手QQ群:570568346,欢迎进群讨论 Python51学习