• 爬虫基础知识简单案例


    1.爬虫基础
    爬虫概念
    什么是爬虫
    爬虫是一个应用程序
    是指某一个用于爬取数据的应用程序
    爬取的目标可以使整个互联网 也可以是单独的某一个服务器
    在CS结构中 爬虫属于client 客户端

    爬虫的价值 :
    互联网中最有价值的就是数据
    爬虫中首要任务就是要通过网络取获取模板服务器的数据;来为自己创造价值

    爬虫的流程:
    首先明确 我们的爬虫是客户端 要爬的数据在服务器上存储,
    所以需要借助网络编程,底层的网络协议已经有现成的封装不需要自己写,
    数据传输已经解决,问题是对方给我的数据我能不能看懂 我的数据对方能不能看懂
    绝大多数网络传输都是采用的HTTP(*****)

    HTTP 协议 超文本传输协议


    1.明确要爬取的url地址


    2.发送请求
    浏览器发送请求
    第三方requests模块 pip install requests
    内置的urllib模块
    selenium (自动化测试模块)用程序驱动浏览器发送请求
    之所以用selenium是因为一些网站需要人机交互(点击,拖拽等等操作)

    针对移动app可以使用代理服务器 可以截获app端发送的请求信息 Charles(青花瓷)


    3.接收响应
    浏览器接受相应后会渲染页面进行展示 无法拿到数据 所以更多情况下使用用浏览器来分析请求详情
    requests和urllib都会直接返回响应体
    selenium 提供了find_element***的接口用于获取数据


    4.解析数据
    re
    BeautifulSoup 封装了常用的正则表达式
    移动端返回的/ajax返回的json数据 直接json.load


    5.存储数据
    mysql等 关系型数据库
    MongoDB redis 非关系型数据库 一般用在高并发爬虫中


    接口测试工具postman paw(mac 可以自动生成请求代码)

    Scrapy爬虫框架


    案例:爬取梨视频

    mport requests,re,json,uuid
    from concurrent.futures import ThreadPoolExecutor
    def spider(category_id):
    txt=requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=%s&start=12'%category_id)
    requests_list=[]
    video_id_list=re.findall('<a href="video_(d+)"',txt.text)
    video_id_list=tuple(video_id_list)
    for i in video_id_list:
    requests_dict={}

    text=requests.get('https://www.pearvideo.com/video_%s'%i)
    requests_dict['video_id'] = re.search('srcUrl="(.*?)"',text.text).group(1)
    # print(text.text)
    # print(re.search('<h1 class="video-tt">(.*?)</h1>',text.text))
    requests_dict['title']=re.search('<h1 class="video-tt">(.*?)</h1>',text.text).group(1)
    requests_dict['data'] = re.search('<div class="date">(.*?)</div>',text.text).group(1)
    requests_dict['up'] = re.search('<div class="fav" data-id="d+">(.*?)</div>', text.text).group(1)
    requests_list.append(requests_dict)

    pool.submit(download,requests_dict['video_id'],requests_dict['title'])
    with open ('down_load1' ,'wt')as f:
    json.dump(requests_list,f)

    print(requests_list)
    return
    def download(url,title):
    print('%s开始下载了'%url)
    video=requests.get(url)

    with open ('%s.mp4'%title[-1],'wb')as f:
    f.write(video.content)
    print('%s下载完成' % url)




    if __name__=='__main__':
    pool=ThreadPoolExecutor(2)
    spider(8)


    需要的数据:
    标题
    视频连接
    发布时间
    点赞数
    详情

    爬取的流程
    1.爬取首页中所有的视频的id
    2.拼接详情地址并请求
    3.通过re解析数据
    4.将结果存储为json数据


    分析浏览器请求过程发现:
    主要接口为:
    https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=5&start=0
    categoryId=5 表示视频的分类
    start=0 表示其实位置
    默认每一页请求12条数据


    分析请求头中有用的信息
    1.user-agent 用来识别客户端类型
    2.refer 用来识别 用户从哪个页面过来的
    3.Cookie 当页面需要验证用户身份时 使用

    响应头:
    location 当请求被重定向时 就会带有该字段 可以通过状态码30* 来识别重定向

    发送post请求
    requests 中
    get请求 参数放在地址后或是使用params参数来指定 一格字典
    post请求 参数使用data参数来指定 是一个字典
    如果是登录请求一般都需要带token
    先发送请求获取token的值 token值一定都在一个form表单中

    百度搜索
    # 手动进行中文编码
    #from urllib.parse import urlencode
    #print(urlencode({"wd":key},encoding="utf-8"))


    url = "https://www.baidu.com/s"


    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

    resp = requests.get(url,
    params={"wd":key},
    headers = {"User-Agent":user_agent})



    with open("baidu.html","wb") as f:
    f.write(resp.content)
    #print(resp.text)

    登录 github

    def spider():
    # session=requests.session()
    # text=session.get('https://github.com/login')
    # token=re.search('<input type="hidden" name="authenticity_token" value="(.*?)" /> ',text.text).group(1)
    # login_url='https://github.com/session'
    # response_text=session.post(login_url,headers={
    # "Referer": "https: // github.com / login",
    # "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.7.0.18838"
    # },data={
    # "utf8":"✓",
    # "authenticity_token":token,
    # "login":"",
    # "password":"",
    # "commit":"Sign in"
    # })
    # print(response_text.status_code)
    # with open ('spider.html','wb')as f:
    # f.write(response_text.content)
    #
    #
    # spider()

  • 相关阅读:
    Taurus.MVC 如何升级并运行在NET6、NET7
    Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
    Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
    Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
    工业制造行业的低代码开发平台思维架构图
    Visual Studio 2022(VS2022) 密钥/激活码
    DataStreamAPI核心介绍
    Flask 学习91.使用 gunicorn 部署 flask 上海
    docker学习16Docker 容器设置时区 上海
    Flask 学习92.使用 gunicorn 部署 flask 出现NoAuthorizationError: Missing JWT in headers or cookies问题 上海
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10685699.html
Copyright © 2020-2023  润新知