• 网络爬虫


    阶段大纲:
    一. 爬虫
    1. 基本操作
    - 登录任意网站(伪造浏览器的任何行为)
    2. 性能相关
    - 并发方案:
    - 异步IO: gevent/Twisted/asyncio/aiohttp
    - 自定义异步IO模块
    - IO多路复用:select
    3. Scrapy框架
    介绍:异步IO:Twisted
    - 基于Scrapy源码自定义爬虫框架
    - 使用Scrapy

    二. Tornado框架(异步非阻塞)
    1. Tornado的基本使用
    - 小示例
    - 自定义组件
    2. Tornado源码剖析

    3. 自定义异步非阻塞框架 select实现


    1. 爬虫基本操作
    a. 爬虫
    - 定向
    - 非定向

    b.
    需求一:
    下载页面:
    http://www.autohome.com.cn/news/

    筛选:
    正则表达式

    ========== 开源模块 ==========

    1. requests
    pip3 install requests

    response = requests.get('http://www.autohome.com.cn/news/')
    response.text


    总结:

    response = requests.get('URL')
    response.text
    response.content
    response.encoding
    response.aparent_encoding
    response.status_code
    response.cookies.get_dict()


    requests.get('http://www.autohome.com.cn/news/',cookie={'xx':'xxx'})

    2. beautisoup模块
    pip3 install beautifulsoup4

    from bs4 import BeautiSoup
    soup = BeautiSoup(response.text,features='html.parser')
    target = soup.find(id='auto-channel-lazyload-article')
    print(target)

    总结:
    soup = beautifulsoup('<html>...</html>',features='html.parser')
    v1 = soup.find('div')
    v1 = soup.find(id='i1')
    v1 = soup.find('div',id='i1')

    v2 = soup.find_all('div')
    v2 = soup.find_all(id='i1')
    v2 = soup.find_all('div',id='i1')

    obj = v1
    obj = v2[0]

    obj.text
    obj.attrs


    需求二:
    通过程序自动登录github

    post_dict = {
    "phone": '111111111',
    'password': 'xxx',
    'oneMonth': 1
    }
    response = requests.post(
    url="http://dig.chouti.com/login",
    data = post_dict
    )

    print(response.text)
    cookie_dict = response.cookies.get_dict()


    c. 模块详细使用
    requests

    - 方法关系
    requests.get(.....)
    requests.post(.....)
    requests.put(.....)
    requests.delete(.....)
    ...

    requests.request('POST'...)
    - 参数
    request.request
    - method: 提交方式
    - url: 提交地址
    - params: 在URL中传递的参数,GET
    requests.request(
    method='GET',
    url= 'http://www.oldboyedu.com',
    params = {'k1':'v1','k2':'v2'}
    )
    # http://www.oldboyedu.com?k1=v1&k2=v2
    - data: 在请求体里传递的数据

    requests.request(
    method='POST',
    url= 'http://www.oldboyedu.com',
    params = {'k1':'v1','k2':'v2'},
    data = {'use':'alex','pwd': '123','x':[11,2,3]}
    )

    请求头:
    content-type: application/url-form-encod.....

    请求体:
    use=alex&pwd=123


    - json 在请求体里传递的数据
    requests.request(
    method='POST',
    url= 'http://www.oldboyedu.com',
    params = {'k1':'v1','k2':'v2'},
    json = {'use':'alex','pwd': '123'}
    )
    请求头:
    content-type: application/json

    请求体:
    "{'use':'alex','pwd': '123'}"

    PS: 字典中嵌套字典时

    - headers 请求头

    requests.request(
    method='POST',
    url= 'http://www.oldboyedu.com',
    params = {'k1':'v1','k2':'v2'},
    json = {'use':'alex','pwd': '123'},
    headers={
    'Referer': 'http://dig.chouti.com/',
    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
    }
    )
    - cookies Cookies



    - files 上传文件

    - auth 基本认知(headers中加入加密的用户名和密码)

    - timeout 请求和响应的超市时间

    - allow_redirects 是否允许重定向

    - proxies 代理

    - verify 是否忽略证书

    - cert 证书文件

    - stream 村长下大片

    - session: 用于保存客户端历史访问信息

         

    import requests
    from  bs4 import BeautifulSoup
    response=requests.get(url="https://www.autohome.com.cn/news/",params=None)
    response.encoding=response.apparent_encoding#解决乱码问题
    soup=BeautifulSoup(response.text,features="html.parser")#features="html.parser"将HTML转化为对象
    target=soup.find(id="auto-channel-lazyload-article")
    li_list=target.find_all("li")#注意列表没有find方法
    for i in li_list:
        a=i.find("a")
        if a:
            #print(a.attrs.get("href"))
            txt=a.find("h3").text
    
            print(txt,type(txt))
            imag_url=a.find("img").attrs.get("src")
            print(imag_url,type(imag_url))
            image_response=requests.get(url="http:"+imag_url)
            import uuid
            file_name=str(uuid.uuid4())+".jpg"
            with open(file_name,"wb")as f:
                f.write(image_response.content)

     

  • 相关阅读:
    多线程之同步代码块与同步函数
    图片上传客户端与服务端
    tcp上传学习二--文本文件上传
    javaScript编写9*9口诀
    tcp聊天
    udp聊天室--简易
    往sencha.cmd中恢复设计项时,不论是系统的还是应用的,恢复进去之后都应该一键发布到前端
    一个设计项上的按钮调另一个设计项的列表界面,同时加筛选条件
    点击【****】设计项上的某个按钮,直接调出另一个设计项的【编辑界面】
    前端向后端发送请求,后端返回的一个值的请求的ajax.get();方法
  • 原文地址:https://www.cnblogs.com/zypfzw/p/9153006.html
Copyright © 2020-2023  润新知