python爬虫小记



一、爬虫设计要点:

1、在写爬虫的时候,思考代码的总体格局,让代码既可以捕捉异常又容易阅读
2、具有周密的异常处理功能,会让快速稳定地网络数据采集变得简单易行。
3、面对页面解析难题(Gordian Knot)的时候,不假思索地直接写几行语句来抽取信息是非常直接的做法。但是,像这样鲁莽放纵地使用技术,只会让程序变得难以调试或脆弱不堪,甚至二者兼具。在开始解析网页之前,应该先考虑解析复杂的 HTML 页面时需要避免的问题。
4、面对埋藏很深或格式不友好的数据时,千万不要不经思考就写代码,一定要三思而后行


二、实践基础:

1、通常在你准备打印、存储和操作数据时,应该最后才使用 .get_text() 。一般情况下,应该尽可能地保留 HTML 文档的标签结构。
2、BeautifulSoup 里的 find() 和 findAll() 可能是最常用的两个函数。借助它们,你可以通过标签的不同属性轻松地过滤 HTML 页面,查找需要的标签组或单个标签。
findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)
3、find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等. find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,搜索方法与普通tag的搜索方法相同,搜索文档搜索文档包含的内容.
4、导航树
  • 导航树的纵向和横向导航
  • 孩子(children)和后代(descendants)有显著的不同:和人类的家谱一样,子标签就是一个父标签的下一级,而后代标签是指一个父标签下面所有级别的标签。
  • next_siblings() 函数可以让收集表格数据成为简单的事情
5、使用网络爬虫的时候,你必须非常谨慎地考虑需要消耗多少网络流量,还要尽力思考能不能让采集目标的服务器负载更低一些。

三、实践

3.1 网站采集

  • 方法1:一个常用的费时的网站采集方法就是从顶级页面开始(比如主页),然后搜索页面上的所有链接,形成列表。再去采集这些链接的每一个页面,然后把在每个页面上找到的链接形成新的列表,重复执行下一轮采集。
  • 很明显,这是一个复杂度增长很快的情形。假如每个页面有 10 个链接,网站上有 5 个页面深度(一个中等规模网站的主流深度),那么如果你要采集整个网站,一共得采集的网页数量就是 105,即 100 000 个页面。不过,虽然“5 个页面深度,每页 10 个链接”是网站的主流配置,但其实很少有网站真的有 100 000 甚至更多的页面。这是因为很大一部分内链都是重复的。
  • Python 默认的递归限制(程序递归地自我调用次数)是 1000 次。
  • 在一个异常处理语句中包裹多行语句显然是有点儿危险的。首先,你没法儿识别出究竟是哪行代码出现了异常。
  • 在你写爬虫随意跟随外链跳转之前,请问自己几个问题:
    • 我要收集哪些数据?这些数据可以通过采集几个已经确定的网站(永远是最简单的做法)完成吗?或者我的爬虫需要发现那些我可能不知道的网站吗?
    • 当我的爬虫到了某个网站,它是立即顺着下一个出站链接跳到一个新网站,还是在网站上呆一会儿,深入采集网站的内容?
    • 有没有我不想采集的一类网站?我对非英文网站的内容感兴趣吗?
    • 如果我的网络爬虫引起了某个网站网管的怀疑,我如何避免法律责任?


  • 重定向(redirect)允许一个网页在不同的域名下显示。重定向有两种形式:
    • 服务器端重定向,网页在加载之前先改变了 URL;
    • 客户端重定向,有时你会在网页上看到“10秒钟后页面自动跳转到……”之类的消息,表示在跳转到新 URL 之前网页需要加载内容。

基础练习抓取网址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值