• 利用Python爬去囧网福利(多线程、urllib、request)


    import os;
    import urllib.request;
    import re;
    import threading;# 多线程
    from urllib.error import URLError#接收异常's 模块
    
    
    #获取网站的源码
    class QsSpider:
        #init 初始化构造函数 .self本身
        def __init__(self):
          self.user_agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
          self.header = {'User-Agent':self.user_agent}
          self.url = 'http://www.qiubaichengren.net/%s.html'
          self.save_dir = './img'
          self.page_num = 20  #page num
    #获取网站源代码
        def load_html(self,page):
            try:
                web_path = self.url % page
                request = urllib.request.Request(web_path,headers=self.header)
                with urllib.request.urlopen(request) as f:
                    html_content = f.read().decode('gbk')
                    #print(html_content)
                    self.pick_pic(html_content)
            except URLError as e :
                print(e.reason) #异常原因
        #download
        def sava_pic(self,img):
            save_path = self.save_dir + "/" +img.replace(':','@').replace('/','_')
            if not os.path.exists(self.save_dir):
                os.makedirs(self.save_dir)
            print(save_path)
            urllib.request.urlretrieve(img,save_path)
        #filter
        def pick_pic(self,html_content):
            patren = re.compile(r'src="(http:.*?.(?:jpg|png|gif))')
            pic_path_list = patren.findall(html_content)
            for i in pic_path_list:
               #print(i)
               self.sava_pic(str(i))
    
    
        #mamy threading
        def start(self):
            for i in range(1,self.page_num):
                thread = threading.Thread(target=self.load_html,args=str(i))
                thread.start()
    
    # main void
    spider = QsSpider()
    spider.start()

    一、爬虫流程:

    1、发起请求

    使用http库向目标站点发起请求,即发送一个Request

    Request包含:请求头、请求体等 

    Request模块缺陷:不能执行JS 和CSS 代码

    2、获取响应内容

    如果服务器能正常响应,则会得到一个Response

    Response包含:html,json,图片,视频等

    3、解析内容

    解析html数据:正则表达式(RE模块),第三方解析库如Beautifulsoup,pyquery等

    解析json数据:json模块

    解析二进制数据:以wb的方式写入文件

    4、保存数据

    数据库(MySQL,Mongdb、Redis)

    文件

    二、响应Response

    1、响应状态码

      200:代表成功

      301:代表跳转

      404:文件不存在

      403:无权限访问

      502:服务器错误

    三、http协议 请求与响应

    Request:用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)

    Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)

    ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。

    四、结果(福利)

  • 相关阅读:
    接口测试工具 — jmeter(关联)
    接口测试工具 — jmeter(参数化)
    接口测试工具 — jmeter(header与cookie的添加)
    【多态】重写与重载的区别
    【面试】软件测试面试题
    【Jenkins】testng+testNgXslt+ant优化测试报告
    【ANT】输入中文格式为乱码
    【Sql】经典sql语句
    【log4j】使用注意事项
    【问题】用ant编译时,提示编码utf为不可映射字符
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/9583619.html
Copyright © 2020-2023  润新知