主要流程:

获取url
下载网页
从网页中找寻自己需要的保存(解析+输出)
主要概念
URL:分大小写
统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

基本URL包含模式/协议、服务器名称/IP地址、路径和文件名
模式/协议(scheme):它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP)

文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。 [2]

注释:有时候,URL以斜杠“/”结尾,而没有给出文件名,在这种情况下,URL引用路径中最后一个目录中的默认文件(通常对应于主页),这个文件常常被称为 index.html 或 default.htm。

URL管理器:
包括:管理待抓取URL集合&已抓取URL集合

作用:

1、添加新URL到带爬取集合中(判断是否重复抓取)

2、从管理器集合中获取带爬取URL(判断是否取完),放入已爬取集合(帮助判断是否重复)

实现方式

网页下载器:
Python包括urllib,requests等库下载网页

主要工具模板:
urllib
requests
注:urllib2改为urllib.request

案例:
图虫爬取 Github

主要Main:

if __name__ == '__main__':
root_url = "https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91/85895?fr=aladdin"
obj_spider = SpiderMain()
obj_spider.craw(root_url)
主类:

class SpiderMain(object):
def __init__(self, ):
self.urls = url.UrlManager()
self.downloader = downloader.HtmlDownloader()
self.parser = parser.HtmlParser()
self.outputer = outputer.HtmlOutputer()

def craw(self, root_url): # 调度程序
count = 1
self.urls.add_new_url(root_url) # 只使用一次,获取根url
while self.urls.has_new_url(): # 判别是否有新的url
try:
new_url = self.urls.get_new_url() # 获取待爬取的新url
print('craw %d : %s' % (count, new_url))
html_cont = self.downloader.download(new_url) # 下载
new_urls, new_data = self.parser.parse(new_url, html_cont) # 解析

self.urls.add_new_urls(new_urls) # 新增界面一堆urls
self.outputer.collect_data(new_data) # 收集价值数据
count += 1

if count == 100:
break

except:
print('craw failed')

self.outputer.output_html()
 
---------------------
作者:YZXnuaa
来源:CSDN
原文:https://blog.csdn.net/YZXnuaa/article/details/91005849
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
  2. sass心得
  3. Android课程---帧布局 FrameLayout
  4. avalon2学习教程09循环操作
  5. Effective Java 24 Eliminate unchecked warnings
  6. [转]pro*c/c++编译错误 ” error: sqlca.h: No such file or directory “ 的解决办法
  7. HDU 1787 GCD Again
  8. php:检测用户当前浏览器是否为IE浏览器
  9. 程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法
  10. PHP中提问频率最高的11个面试题和答案
  11. [LeetCode] Knight Probability in Chessboard 棋盘上骑士的可能性
  12. iOS webview 获取html中的图片地址
  13. CSS float的相关图文详解(一)
  14. Windows文本文件上传至linux显示乱码解决方法
  15. Android为TV端助力 关于JNI的使用方法
  16. javaMail简介(一)
  17. WPF中获取控件默认样式和模板XML
  18. Eclipse 工程目录下的.classpath、.project文件和.settings文件作用
  19. 用requests爬取一个招聘网站
  20. 2018-2019 前期任务(一):资料阅读&Python入门

热门文章

  1. 四则运算计算器的微信小程序_1 界面
  2. 2019中山纪念中学夏令营-Day1[JZOJ]
  3. TP5使用phpoffice phpexcel包操作excel(导出)
  4. IdentitiServser4 + Mysql实现Authorization Server
  5. Git复习(四)之解决冲突
  6. 解决stackoverflow加载慢的插件
  7. 一个页面两个div(一个柱状图或者折线图一个饼图)
  8. git 基础命令 学习总结
  9. iServer-Linux环境下开机自启动实现
  10. 多线程编程-- part 8 CyclicBarrier