Spider第1课:爬虫基础

这篇博客介绍了Python爬虫的基础知识,包括urllib模块的使用,如urlopen和request.data,以及如何处理网页编码问题。还提到了模拟POST请求的实现,并以百度翻译为例进行了分析,探讨了在爬虫过程中可能遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

爬虫准备

本节包含以下知识

  • urlopen
  • chardet
  • response
  • parse
  • post

爬虫的介绍

  • 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本
  • 两大特征:
    • 能按作者要求下载数据或者内容
    • 能自动在网络上流窜
  • 三大步骤:
    • 下载网页
    • 提取想要的信息
    • 根据一定规则自动跳到另外的网页上执行上面两步内容
  • 爬虫分类
    • 通用爬虫
    • 专用爬虫(聚焦爬虫)
  • Python网络包简介
    • Python2.X:urllib,urllib2,urllib3,httplib,httplib2,request
    • Python3.X:urllib,urllib3,httplib,request
    • Python2基本使用urllib和urllib2或者request即可
    • Python3基本使用urllib和request

urllib

包含模块

  • urllib.request:打开和读取urls
  • urllib.error:包含urllib.request产生的常见的错误,使用try捕捉
  • urllib.parse:包含一些解析url的方法
  • urllib.robotparse:解析robots.txt文件,网站一些针对爬虫的规矩会写在这里面,比如能爬的有哪些不能爬的有哪些,或者告诉你,你一天只能爬一次。
  • 案例见1.py
    • 在这个案例实现过程中遇到的几个小问题:
      • 有的网址爬的很慢有的网址爬的很快,这可能和网站服务器有关,一开始我还以为是我电脑太辣鸡(或许可能就是我电脑辣鸡…)也可能和所爬取网页的内容量有关,因为我爬的是海贼王漫画的网址。
      • bytes转换成字符串需要decode,网页的不同可能会抛出这样的异常:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 244: invalid start byte
        这种情况我们可以打开控制台,看一下网页结构,在head中找meta标签,看一下charset属性值,通常是utf-8但是也有国际码gbk的,所以将decode第一个参数传入gbk(这是我爬的网址的charset属性值):decode(“gbk”),我试了一下就报了这样的错,这样一般是decode第二个参数的errors为严格(strict)形式造成的,因为默认strict,最后写成decode(“gbk”,“ignore”)这样问题解决。

在这里插入图片描述

在这里插入图片描述

from urllib import request
if __name__ == '__main__':
    url = "http://manhua.kukudm.com/comiclist/4/index.htm"
    # 打开相应url并把相应页面座位返回
    rsp = request.urlopen(url)

    # 把返回结果读取出来,这里读取出来的是bytes
    html = rsp.read()
    print(type(html))

    # 把bytes转换成字符串需要解码
    html = html.decode("gbk","ignore")
    print(html)
# 由于打印出的html篇幅较大,此代码块就不运行了

网页编码问题解决(我透…原来下节课就讲了,我还在上边自己研究…)

  • 来看一下大佬解法吧
  • chardet:可以检测页面文件的编码格式,但是可能有误(淦,妙啊…)
from urllib import request
import chardet
if __name__ == "__main__":
    url = "https://blog.csdn.net/c406495762/article/details/72858983"
    # 用request打开url
    rsp 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络爬虫程序   什么是网络爬虫(Spider)程序   Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有满足条件的新URL为止。WebCrawler的主要功能是自动从Internet上的各Web 站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等   1. 搜索策略   ① IP 地址搜索策略   先赋予爬虫一个起始的IP地址,然后根据IP地址递增的方式搜索本IP地址段后的每一个WWW 地址中的文档,它完全不考虑各文档中指向其它Web 站点的超级链接地址。优点是搜索全面,能够发现那些没被其它文档引用的新文档的信息源;缺点是不适合大规模搜索。   ② 深度优先搜索策略   深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。优点是能遍历一个Web 站点或深层嵌套的文档集合;缺点是因为Web结构相当深,,有可能造成一旦进去,再也出不来的情况发生。   ③ 宽度优先搜索策略   在宽度优先搜索中,先搜索完一个Web 页面中所有的超级链接,然后再继续搜索下一层, 直到底层为止。例如,一个HTML 文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链, 而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。一旦一层上的所有超链都己被选择过,就可以开始在刚才处理过的HIML 文件中搜索其余的超链。这就保证了对浅层的首先处理。当遇到一个无穷尽的深层分支时,不会导致陷进WWW 中的深层文档中出现出不来的情况发生。宽度优先搜索策略还有一个优点,即它能在两个HTML文件之间找到最短路径。宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。综合考虑以上几种策略和国内信息导航系统搜索信息的特点,国内一般采用以宽度优先搜索策略为主、线性搜索策略为辅的搜索策略。对于某些不被引用的或很少被引用的HTML文件,宽度优先搜索策略可能会遗漏这些孤立的信息源,可以用线性搜索策略作为它的补充。   ④ 专业搜索引擎的爬虫策略   目前,专业搜索引擎网络爬虫通常采用“最好优先”原则访问WEB,即为快速、有效地获得更多的与主题相关的页面(简称“回报”),每次选择“最有价值”的链接进行访问。由于链接包含于页面之中,而通常具有较高价值的页面包含的链接也具有较高的价值,因而对链接价值的评价有时也转换为对页面价值的评价。   ⑤ 爬虫的设计中应该注意的问题   第一个问题是URL地址的标准化:在WWW上,一个URL地址可以有多种表示方法,可以用IP 地址表示,也可以用域名来表示。为了避免爬虫重复访问同一地址。第二个问题是避免掉进网络陷阱:网络上的链接情况比较复杂,一些静态的网页可能构成闭环回路。为了避免爬虫在一条循环路线上反复抓取,在把URL加入待搜索地址列表之前都要检查是否已在待搜索的地址列表中出现过。对于动态网页,爬虫应该忽略所有带参数的URL。第三个问题:对于拒绝访问的页面,爬虫应该遵从“漫游拒绝访问规则”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值