zoukankan      html  css  js  c++  java
  • 【Python】爬虫汇总

    主要流程:


    获取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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    react native打包后不能请求到数据
    webpack学习记录
    RN 与 Native (Android) 之间的通信
    linux常用指令--防火墙
    制作nodejs项目镜像,实现docker下的快速部署
    centos7+ docker1.12 实践部署docker及配置direct_lvm
    C# mvc中动态压缩文件发送给前端
    [转载] 全方位提升网站打开速度:前端、后端、新的技术
    Android Listview 去除边框
    SSH初体验系列--Hibernate--3--单值与分页查询
  • 原文地址:https://www.cnblogs.com/valorchang/p/11303665.html
Copyright © 2011-2022 走看看