zoukankan      html  css  js  c++  java
  • 七月在线爬虫班学习笔记(一)

    早就购买了这个课程,但是却一直拖着没看。最近不在北京实习,重新回到成都,回到学校才有心继续学习。研究生的日子不多了,希望自己能好好利用起来。七月在线的地址:https://www.julyedu.com/ 。这个七月在线的平台我觉得还行,里面有收费的也有免费的课程,适合对机器学习、人工智能感兴趣的同学。大家可以去看看。该课程共有八次课。第课内容如下:

    1. 爬虫简介及Python开发爬虫的优势
    2.  Python简介及开发环境安装
    3. HTTP/JSON/XML简介
    4. MySQL/SQLLite介绍与配置
    5. 爬虫框架介绍
    6. Robots协议
    7. ip138邮编抓取实战
    8. 多线程抓取新浪股票 数据

    1.爬虫简介及Python开发爬虫的优势

    2.Python简介及开发环境安装

    我在window10 下直接使用的是anaconda3。比较方便。安装了虚拟机Linux环境下都会自带Python。我这里懒得打字直接剪切了ppt的内容。

    3.HTTP/JSON/XML简介

    大家在编写爬虫的过程中一定会使用到网络相关的知识,以及分析网页从而去提取相关的信息,所以了解http,以及json、xml这些都是有必要的。

     

     

    4.MySQL/SQLLite介绍与配置

     

     5.爬虫框架介绍

     6.Robots规范介绍

     

     7.ip138邮编抓取实战

    最后这两个代码的实例都是可以运行的,并且当时老师是直播手写代码,思路非常的清晰。下面是代码。

    import requests  #比urllib好用
    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')
    #    print(type(content), content)  # content为字符串类型
        # 确定要查找字符串的开始位置,并用切片获取内容
        start=content.find('<map name="map_86" id="map_86">')
        end=content.find('</map>')
        content=content[start:end+len('</map>')].strip() #获取所需的字段并去掉首尾的空格
    #    print("content:", content)
        provinces=[]
        # 生成Sax处理器, SAX(simple API for XML)是一种XML解析的替代方法, 详情百科
        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:", provinces)

    8.多线程抓取新浪股票 数据

    import requests
    import threading
    
    def display_info(code):
        url='http://hq.sinajs.cn/list=' + code
        response=requests.get(url).text  # 核心,爬下内容直接打印输出
        print(response)
    
    def single_thread(codes):
        for code in codes:
            code = code.strip()
            display_info(code)
    
    def multi_thread(tasks):
    #    print("tasks:", tasks)
        # 用列表推导生成线程,注意只有一个元素的tuple定义时必须加一个逗号! 具体参见廖雪峰的python3基础教程 "tuple"
    #    print((['sh600007', 'sh600008', 'sh600009']), (['sh600007', 'sh600008', 'sh600009'], ))
        # 关于多线程这一块可查看 廖雪峰的python3基础教程 "多线程"
        threads = [threading.Thread(target = single_thread, args=(codes, )) for codes in tasks]
        # 启动线程
        for t in threads:
            t.start()
        # 等待直到线程结束
        for t in threads:
            t.join()
    
    # 注意main函数的形式
    if __name__ == '__main__':
        codes=['sh600004', 'sh600005', 'sh600006', 'sh600007', 'sh600008', 'sh600009']
    #    print("len(codes):", len(codes))
        # 计算每个线程要做多少工作
        thread_len=int(len(codes) / 4)
    #    print("thread_len:", thread_len)
        t1=codes[0:thread_len]
        t2=codes[thread_len : thread_len*2]
        t3=codes[thread_len*2 : thread_len * 3]
        t4=codes[thread_len * 3:]
    #    print("t1:", t1, "t2:", t2, "t3:", t3, "t4:", t4)
    
        # 多线程启动
        multi_thread([t1, t2, t3, t4])
    情不知所起一往而深
  • 相关阅读:
    刷题的 vscodeleetcode
    一个简单的小程序演示Unity的三种依赖注入方式
    WCF服务端运行时架构体系详解[上篇]
    通过WCF扩展实现消息压缩
    通过“四大行为”对WCF的扩展[原理篇]
    [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]
    [WCF权限控制]ASP.NET Roles授权[下篇]
    [WCF权限控制]通过扩展自行实现服务授权[提供源码下载]
    通过自定义ServiceHost实现对WCF的扩展[实例篇]
    [WCF权限控制]WCF自定义授权体系详解[实例篇]
  • 原文地址:https://www.cnblogs.com/xingbiaoblog/p/9002591.html
Copyright © 2011-2022 走看看