• Python爬虫知识点一


    一。入门知识:

    1.1.HTTP简介
    HTTP = HyperText Transfer Protocol
    URI = Uniform Resource Identifier
    URL = Uniform Resource Locator
    URI和URL的区别:URI强调的是资源,而URL强调的是资源的位置。
    1.2常用请求类型
    OPTIONS: 返回服务器针对特定资源所支持的http请求方法。
    HEAD: 向服务器索要与get请求相一致的响应,只不过响应体将不会被返回。
    GET: 向特定资源发出请求
    PUT: 向指定资源位置上传其最新内容
    POST: 向指定资源提交数据进行处理请求
    DELETE: 请求服务器删除指定URI所标识的资源
    PATCH: 用来将局部修改应用于某一资源
    1.3HTTP常见状态码
    200/OK: 请求成功
    201/Created: 请求已被实现,且一个新资源已根据请求被建立,URI跟随Location头信息返回。
    202/Accepted: 服务器已接受请求,但尚未处理。
    400/Bad Request: 请求无法被服务器理解
    401/Unauthorized: 当前请求需要用户验证
    403/Forbidden: 服务器已理解请求,但拒绝执行。
    404/Not Found

    1.4 爬虫框架介绍
    第一步:将种子URL放入队列
    第二步:从队列中获取URL,抓取内容。
    第三步:解析抓取内容,将需要进一步抓取的URL放入工作队列,存储解析后的内容
    1.5 抓取策略
    深度优先:举例先完成专题一的所有内容,再完成专题二的所有内容。

    广度优先
    PageRank
    大站优先策略 举例:
    根据网站的Pr顺序 指定优先级

    1.6 如何去重
    Hash表
    bloom过滤器

    1.7 爬虫质量标准

    分布式
    可伸缩性
    性能和有效性
    质量
    新鲜性
    更新
    可扩展性

    二。代码实施

    import requests
    import xml.etree.ElementTree as ET
    from xml.parsers.expat import ParserCreate
    
    
    class DefaultSaxHandler(object):
        def __init__(self, provinces):
            self.provinces = provinces
    
        # 处理标签开始
        def start_element(self, name, attrs):
            if name != 'map':
                name = attrs['title']
                number = attrs['href']
                self.provinces.append((name, number))
    
        # 处理标签结束
        def end_element(self, name):
            pass
    
        # 文本处理
        def char_data(self, text):
            pass
    
    
    def get_province_entry(url):
        # 获取文本,并用gb2312解码
        content = requests.get(url).content.decode('gb2312')
        # 确定要查找字符串的开始结束位置,并用切片获取内容。
        start = content.find('<map name="map_86" id="map_86">')
        end = content.find('</map>')
        content = content[start:end + len('</map>')].strip()
        print(content)
        provinces = []
        # 生成Sax处理器
        handler = DefaultSaxHandler(provinces)
        # 初始化分析器
        parser = ParserCreate()
        parser.StartElementHandler = handler.start_element
        parser.EndElementHandler = handler.end_element
        parser.CharacterDataHandler = handler.char_data
        # 解析数据
        parser.Parse(content)
        # 结果字典为每一页的入口代码
        return provinces
    
    
    provinces = get_province_entry('http://www.ip138.com/post')
    print(provinces)

    结果如下:

    Ps: start方法中判断不等于map标签的即为area标签 然后选取href title属性对应的值即可

     持续更新中。。。。,欢迎大家关注我的公众号LHWorld.

  • 相关阅读:
    伸缩盒 Flexible Box(旧)
    js 事件绑定
    vertical-align 垂直居中
    小程序de 一些经验1
    更新一下 我的红包雨
    HTML元素坐标定位,这些知识点得掌握
    JS实现-页面数据无限加载
    em和px的区别一次彻底搞清楚!
    js模糊查询
    phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法
  • 原文地址:https://www.cnblogs.com/LHWorldBlog/p/7836604.html
Copyright © 2020-2023  润新知