精华内容
下载资源
问答
  • 文章目录一、环境与工具二、学爬虫必备知识三、requests体验四、get 请求3.1 基础讲解一3.3 基础讲解二3.2 基础讲解三3.4 获取cookie3.5 获取请求头3.6 添加请求头3.5 知乎爬取+反扒技术3.6 抓取二进制数据3.6.1 ...

    一、环境与工具

    环境:jupyter
    如果你没有安装该工具和不会使用,请看这一篇文章:pycharm安装配置与使用详细教程
    可能还会需要这两篇文章:
    1-亲测jupyter打不开浏览器
    2-设置默认打开文件夹
    模块安装:

    !pip install requests
    

    演示一下安装:
    在这里插入图片描述
    安装成功:
    在这里插入图片描述

    二、学爬虫必备知识

    如果你python基础都不会,建议你先看看我写了几十万字的python基础专栏:python全栈基础教程
    我的基础专栏包括最基本的基础,re正则表达式,画图,文件处理,django,mysql操作处理等,如果你基础都不会,建议你先收藏本篇内容,去学完我写的基础,再来看本篇文章。

    三、requests体验

    以百度为例子:

    import requests  
    
    r = requests.get('https://www.baidu.com/')  
    print(type(r))  
    print(r.status_code)  
    print(type(r.text))  
    print(r.text)  
    print(r.cookies)
    

    打印结果如下:
    在这里插入图片描述
    得到一个 Response 对象,然后分别输出了 Response 的类型、状态码、响应体的类型、内容以及 Cookies。在这里仅仅是体验,如果你看不懂,并没有关系。

    四、get 请求

    3.1 基础讲解一

    现在以百度为例子:

    https://www.baidu.com/
    

    我们用get请求网址,打印txt则获取到百度页面源码:

    import requests 
    r = requests.get('https://www.baidu.com/') 
    print(r.text)
    

    运行:
    在这里插入图片描述
    为什么我这里只演示了百度?因为这个不会被反扒,如果被反扒,则会返回为空。大家可以试试别的网址,比如我的博客地址,基本返回为空。不必担心,后续教大家反扒。

    3.3 基础讲解二

    我们以CSDN我自己的博客为例:
    这里就直接使用requests模块的get函数直接来获取(get和urlopen是相同的),主要是这个更方便:

    import requests
    u=requests.get('https://mp.csdn.net/console/article')
    print(u.status_code)#打印状态码
    print(u.text)#打印文本
    print(u.cookies)#打印cookie
    

    运行:
    在这里插入图片描述
    再举例子:

    import requests
    r=requests.post('https://www.csdn.net/?spm=1011.2124.3001.5359')
    s=requests.put('https://www.csdn.net/?spm=1011.2124.3001.5359')
    print(r.status_code)
    print(r.text)
    print(s.status_code)
    print(s.text)
    

    运行:
    在这里插入图片描述
    虽然请求失败但不影响,主要是介绍下用requests模块的话,可以很简单的方式请求,比如说put,post,delete这些之间换一下就换了一个请求方法。这里请求失败因为我们被反扒了。

    3.2 基础讲解三

    首先,构建一个最简单的 GET 请求,请求的链接为 http://httpbin.org/get,该网站会判断如果客户端发起的是 GET 请求的话,它返回相应的请求信息.
    代码:

    import requests  
    r = requests.get('http://httpbin.org/get')
    print(r.text)
    

    运行:
    在这里插入图片描述
    可以发现,我们成功发起了 GET 请求,返回结果中包含请求头、URL、IP 等信息。
    那么,对于 GET 请求,如果要附加额外的信息,一般怎样添加呢?比如现在想添加两个参数,其中 name 是 germey,age 是 22。要构造这个请求链接,是不是要直接写成:

    r = requests.get('http://httpbin.org/get?name=germey&age=22')
    

    这同样很简单,利用 params 这个参数就好了,示例如下:

    import requests  
    
    data = {  
        'name': 'germey',  
        'age': 22  
    }  
    r = requests.get("http://httpbin.org/get", params=data)  
    print(r.text)
    

    运行:
    在这里插入图片描述
    通过返回信息我们可以判断,请求的链接自动被构造成了:http://httpbin.org/get?age=22&name=germey
    另外,网页的返回类型实际上是 str 类型,但是它很特殊,是 JSON 格式的。所以,如果想直接解析返回结果,得到一个字典格式的话,可以直接调用 json 方法。示例如下:

    import requests  
    
    r = requests.get("http://httpbin.org/get")  
    print(type(r.text))  
    print(r.json())  
    print(type(r.json()))
    

    运行:
    在这里插入图片描述
    可以发现,调用 json 方法,就可以将返回结果是 JSON 格式的字符串转化为字典。

    3.4 获取cookie

    import requests
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'
    }#请求头
    url='https://www.csdn.net/?spm=1011.2124.3001.5359'
    r=requests.get(url=url,headers=headers)
    print(r.cookies)#直接打印
    

    运行:
    在这里插入图片描述

    3.5 获取请求头

    手动获取:
    点击右键,选择检查,再选择network,刷新一下,随机选其中一个内容,如下:
    在这里插入图片描述
    复制出来就行。

    3.6 添加请求头

    我们也可以通过 headers 参数来传递头信息。比如,在下面我们的面 “知乎” 的例子中,如果不传递 headers,就不能正常请求,请求结果为403:

    import requests
    
    r = requests.get("https://www.zhihu.com/explore")
    print(r.text)
    

    运行:
    在这里插入图片描述
    但如果加上 headers 并加上 User-Agent 信息,那就没问题了:

    import requests
    
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
    }
    r = requests.get("https://www.zhihu.com/explore", headers=headers)
    print(r.text)
    

    运行:
    在这里插入图片描述
    可以看到加请求头成功了。
    为什么加请求头?可以模拟正常浏览器,防止被反扒。

    3.5 知乎爬取+反扒技术

    先获取cookies:

    import requests
    headers={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
    }
    url='http://www.zhihu.com'
    r=requests.get(url=url,headers=headers)
    print(r.cookies)
    

    运行:
    在这里插入图片描述

    或者登录知乎,找到cookie:
    在这里插入图片描述
    用这里的cookie来获取网页:

    import requests
    headers={
        'Cookie':'_zap=f4cf1039-988d-4506-86b0-4a66e741c6b1; d_c0="AGDcaFGHGRKPTutiDmNxGnxfi7VhsfQ0wI8=|1603730839"; _xsrf=01xnSvUI1MkWP715R02yeXnThs2EHIXu; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1610911317,1611507538,1611565882,1611566000; SESSIONID=EQPbneOhTXEKEWzoKhctFGCvXtNsbB6hgyaptDJMHfy; JOID=UFoUAUOmDkyYr9xFaaZkkCC9KVZ441wf8Mu5CQL4VgrQ4IE_BWQiVfil30VgxKKpzSBYFUbBpzXzd2z2Km1WeDs=; osd=WloUBkysDkyfoNZFaaFrmiC9Llly41wY_8G5CQX3XArQ5441BWQlWvKl30JvzqKpyi9SFUbGqD_zd2v5IG1WfzQ=; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1611673785; capsion_ticket="2|1:0|10:1611673806|14:capsion_ticket|44:N2ExMGExOTQ3YWIwNGE1YzliMTc1Mzk0ZmEwMjAyYTE=|5aecaa59c17c237af06b47a7b1402eb5b996139c8a6e1d15490899fab3c17108"; KLBRSID=031b5396d5ab406499e2ac6fe1bb1a43|1611673848|1611672766; z_c0="2|1:0|10:1611673849|4:z_c0|92:Mi4xUkFJd0lnQUFBQUFBWU54b1VZY1pFaVlBQUFCZ0FsVk4tWDc5WUFCQmZYWFB4ZkM5Z3l6ZlRNSENUUHVhR0lmYy1B|6d89241fc554ad378bce7f27715f2a4cc63cf87028c2da1e4104423b99ee14ee"; unlock_ticket="APBUrbfKXhImAAAAYAJVTQE4EGCaxoSZiXGfIktWFZReL6J3wOaKOQ=="',
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
        'host':'www.zhihu.com',
    }
    url='http://www.zhihu.com'
    r=requests.get(url=url,headers=headers)
    print(r.text)
    

    运行:
    在这里插入图片描述

    返回结果有知乎里的相关内容,这样就是成功登录知乎了
    再提一点session,它可以实现同一个站点进去不同页面:

    import requests
    s=requests.Session()
    s.get('http://httpbin.org/cookies/set/number/147258369')
    r=s.get('http://httpbin.org/cookies')
    print(r.text)
    

    运行:
    在这里插入图片描述

    3.6 抓取二进制数据

    如果想抓取图片、音频、视频等文件,应该怎么办呢?
    图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。所以,想要抓取它们,就要拿到它们的二进制码。

    3.6.1 示例一

    下面以 GitHub 的站点图标为例来看一下:

    import requests
    
    r = requests.get("https://github.com/favicon.ico")
    print(r.text)
    print(r.content)
    

    这里打印了 Response 对象的两个属性,一个是 text,另一个是 content。输出如下:
    在这里插入图片描述
    可以注意到,前者出现了乱码,后者结果前带有一个 b,这代表是 bytes 类型的数据。由于图片是二进制数据,所以前者在打印时转化为 str 类型,也就是图片直接转化为字符串,这理所当然会出现乱码。
    接着,我们将刚才提取到的图片保存下来:

    import requests
    
    r = requests.get("https://github.com/favicon.ico")
    with open('favicon.ico', 'wb') as f:
        f.write(r.content)
    

    运行即可保存。

    3.6.2 示例二

    以爬取我自己的头像为例子:
    在这里插入图片描述

    import requests
    headers={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    }
    url='https://avatar.csdnimg.cn/9/1/6/1_weixin_46211269_1629324723.jpg'
    r = requests.get(url=url,headers=headers)
    with open('phpto.jpg', 'wb') as f:
        f.write(r.content)
    

    运行即可保存。

    3.7 JK妹子爬取

    import requests
    import re
    import urllib.request
    import time
    import os
    header={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
    }
    url='https://cn.bing.com/images/async?q=jk%E5%88%B6%E6%9C%8D%E5%A5%B3%E7%94%9F%E5%A4%B4%E5%83%8F&first=118&count=35&relp=35&cw=1177&ch=705&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1&SFX=4'
    request=requests.get(url=url,headers=header)
    c=request.text
    pattern=re.compile(
        r'<div class="imgpt".*?<div class="img_cont hoff">.*?src="(.*?)".*?</div>',re.S
    )
    items = re.findall(pattern, c)
    # print(items)
    os.makedirs('photo',exist_ok=True)
    for a in items:
        print(a)
    for a in items:
        print("下载图片:"+a)
        b=a.split('/')[-1]
        urllib.request.urlretrieve(a,'photo/'+str(int(time.time()))+'.jpg')
        print(a+'.jpg')
        time.sleep(2)
    
    

    效果:
    在这里插入图片描述

    四、 POST 请求

    前面我们了解了最基本的 GET 请求,另外一种比较常见的请求方式是 POST。

    4.1 数据表单提交

    使用 requests 实现 POST 请求同样非常简单,示例如下:

    import requests
    
    data = {'name': 'germey', 'age': '22'}
    r = requests.post("http://httpbin.org/post", data=data)
    print(r.text)
    

    这里还是请求 http://httpbin.org/post,该网站可以判断如果请求是 POST 方式,就把相关请求信息返回。
    运行结果如下:
    在这里插入图片描述
    可以发现,我们成功获得了返回结果,其中 form 部分就是提交的数据,这就证明 POST 请求成功发送了。

    4.2 添加请求头

    代码如下:

    import requests
    import json
     
    host = "http://httpbin.org/"
    endpoint = "post"
     
    url = ''.join([host,endpoint])
    headers = {"User-Agent":"test request headers"}
     
    
    r = requests.post(url,headers=headers)
    print(r.text)
    

    运行:
    在这里插入图片描述
    可以看到User-Agent部分为我们添加的自定义请求头。

    4.3 提交json

    假设我想提交json格式的内容:

    # -*- coding:utf-8 -*-
    import requests
    import json
     
    host = "http://httpbin.org/"
    endpoint = "post"
     
    url = ''.join([host,endpoint])
    data = {
        "sites": [
                    { "name":"test" , "url":"https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343" },
                    { "name":"google" , "url":"https://blog.csdn.net/weixin_46211269/article/details/120703631?spm=1001.2014.3001.5501" },
                    { "name":"weibo" , "url":"https://blog.csdn.net/weixin_46211269/article/details/120659923?spm=1001.2014.3001.5501" }
        ]
    }
     
    r = requests.post(url,json=data)
    # r = requests.post(url,data=json.dumps(data))
    response = r.json()
    print(response)
    

    运行如下:
    在这里插入图片描述

    4.4 普通文件上传

    代码:

    # -*- coding:utf-8 -*-
    import requests
    import json
     
    host = "http://httpbin.org/"
    endpoint = "post"
     
    url = ''.join([host,endpoint])
    #普通上传
    files = {
                'file':open('test.txt','rb')
            }
     
    r = requests.post(url,files=files)
    print (r.text)
    

    不要忘了自己定义一个test.txt文件
    在这里插入图片描述
    内容为:川川帅哥,保存即可。
    在这里插入图片描述
    选中重命名:
    在这里插入图片描述
    在这里插入图片描述
    运行如下:
    在这里插入图片描述

    四、粉丝福利

    对于个人的忠实粉丝,我随机抽取送如下书籍一人一两本。这本书从自动化测试理论入手,全面地阐述自动化测试的意义及实施过程。全文以Python语言驱动,结合真实案例分别对主流自动化测试工Selenium、Robot Framework、Postman、Python+Requests、Appium等进行系统讲解。通过学习本书,读者可以快速掌握主流自动化测试技术,并帮助读者丰富测试思维,提高Python编码能力。
    在这里插入图片描述

    五、总结

    看一下最终的文件夹:
    在这里插入图片描述

    本篇为requests基础篇,如果本篇内容大家支持多,我尽快出高级篇。有的人要问我为啥不教urlib?个人倒是觉得这个有点被淘汰了,所以我就不讲了,大家觉得有必要讲urlib可以留言,我看人数要不要补充。

    👇🏻 加入私人粉丝群 可通过搜索下方 公众号 发送关键词: 进群
    展开全文
  • 迅速入门爬虫数据清洗与可视化

    千次阅读 2021-10-20 21:19:33
    数据爬取与分析 1. 基础知识 1.1 数据分析的基础知识 数据分析的一般流程: 明确目标-》采集数据-》数据清洗与分析-》绘制图表并且可视化-》得出结论 1.2 具有python特色的程序 1.3 字符串切片 1 循环打印嵌套列表...

    数据爬取与分析

    1. 基础知识

    1.1 数据分析的基础知识

    数据分析的一般流程:

    明确目标-》采集数据-》数据清洗与分析-》绘制图表并且可视化-》得出结论

    1.2 具有python特色的程序

    image-20211019173331490

    1.3 字符串切片

    1 循环打印嵌套列表:movies=[“the holy”,1975,“terry jones”,91,[“graham”,
    [“michael”,“john”,“gilliam”,“idle”,“haha”]]],实现以下形式的输出:

    The holy

    1975

    img

    2、字典值操作

    有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。即:{‘k1’:大于66的所有值,‘k2’:小于66的所有值}

    img

    2. 数据采集-爬虫的设计与实现

    2.1 两条技术路线:

    1. 爬虫框架:scrapy 、selenium

    2. request库,urlib原生爬虫

    2.2 爬虫概念:

    1. 网络爬虫

      网络爬虫是一种按照一定规则,自动抓取互联信息的程序或者脚本。

      由于互联网数据的多样性,资源的有限性,现在根据用户需求定向抓取相关网页并分析,已经成为当今主流爬取策略

    2. 爬虫的本质

      模拟浏览器打开网页,获取网页中我们想要的部分数据

    3. 爬虫工作流程

      • 观察页面特征:使用Ctrl+u查看网页源码,选中某元素,进行审查
      • 请求目标网页并获得相应
      • 定义信息提取规则,使用re(正则)第三方网页解析器,beautiful soup xpath bs4
      • 提取网页数据并保存
    4. 数据通常需要通过解析,解析方式:

      定义信息提取规则,使用re(正则)第三方网页解析器,beautiful soup xpath bs4

    2.4 Scrapy 爬虫

    2.4.1 Scrapy 爬虫的主要部件以及作用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pHCwfals-1634735959385)(C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20211019203520100.png)]

    1. Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
    2. Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
    3. Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
    4. Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
    5. Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
    6. Downloader Middlewares(下载中间件):可以自定义扩展下载功能的组件(代理、cokies等)。
    7. Spider Middlewares(Spider中间件):可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

    2.4.2 Scrapy 爬虫的工作流程

    1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
    2. 引擎把URL封装成一个请求(Request)传给下载器
    3. 下载器把资源下载下来,并封装成应答包(Response)
    4. 爬虫解析Response
    5. 解析出实体(Item),则交给实体管道进行进一步的处理
    6. 解析出的是链接(URL),则把URL交给调度器等待抓取

    2.4.3 与传统的request爬虫对比

    1. scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取 100个网站,并发及分布式处理方面,不够灵活,不便调整与括展。
    2. request 是一个HTTP库, 它只是用来,进行请求,对于HTTP请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现

    2.4.4 scrapy创建爬虫的流程

    1. 手动创建scrapy项目夹 p (mkdir p)

      image-20211019205400303

    2. 启动命令行,进入到该项目如 cd 到p夹下

      image-20211019205502933

    3. scrapy startproject 项目名称

      image-20211019210204050

      image-20211019210219992

      cd E:/p/项目名称进入到该项目夹后,然后执行 scrapy genspider XXX XXXimage-20211019210734763

    4. 配置信息,配置itempiplines等的设置

      后面就是修改配置文件settings.py部分的配置,定义item存数据

    5. 编写爬虫逻辑

      在我们的ptest里面编写爬虫逻辑

    2.5 Selenium 爬虫框架

    2.5.1 适用场景

    爬取动态页面,用于web应用测试的工具,selenium测试直接在浏览器运行,可以模仿人的操作,可以有效应对反爬机制

    2.5.2 安装与配置

    1. pip install
    2. 用anaconda环境
    3. pycharm 直接下载库

    2.5.3 定位元素方式

    有很多种元素定位的方法,比如基于id、name、xpath、css selector等方式来定位

    1. 返回单个元素:

      • find_element_by_id()
      • find_element_by_name()
      • find_element_by_xpath()
      • find_element_by_link_text()
      • find_element_by_partial_link_text()
      • find_element_by_tag_name()
      • find_element_by_class_name()
      • find_element_by_css_selector()
    2. 返回列表:

      • find_elements_by_name()

      • find_elements_by_xpath()

      • find_elements_by_link_text()

      • find_elements_by_partial_link_text()

      • find_elements_by_tag_name()

      • find_elements_by_class_name()

      • find_elements_by_css_selector()

        因为id是唯一的所以我觉得不能返回列表

    3 . 数据库连接与查询

    3.1 Mysql数据库

    3.1.1安装与配置

    1. 安装mysql
    2. 最好再安装一个mysql用户图形化管理界面比如navicate
    3. 配置环境变量
    4. 下载pymysql库

    3.1.2 python操作mysql数据库

    操作步骤:

    1. 新建数据库
    2. 新建表
    3. 连接数据库
    4. 向当前数据库中的表插入数据

    3.2 MongoDB 数据库

    3.2.1安装与配置

    1. 安装MongoDB
    2. 最好再安装一个MongoDB用户图形化管理界面比如navicate
    3. 配置环境变量
    4. 下载pymongo库

    3.2.2 python操作mysql数据库

    操作步骤:

    1. 新建连接
    2. 新建数据库
    3. 连接数据集
    4. 向当前数据集下插入数据

    4. 数据分析

    4.1 numpy

    4.1.1 数组的创建

    import numpy as np
    np.ones(5)

    image-20211019222142508

    A=np.array([[1,2],[3,4]])

    image-20211019222211990

    np.zeros((2,3))

    image-20211019222319410

    4.1.2 数组的变形

    a2=np.arange(8).reshape(2,4)

    image-20211019222516038

    4.1.3 数组的计算

    image-20211019223808885

    image-20211019223913243

    4.2 pandas

    4.2.1 数据读写、选择、整理和描述

    1. 从csv中读取数据

      import pandas as pd

      df =pd.read_csv("./数据阿巴巴巴.csv")

      其实还可以读取html、txt

      高级操作:

      df=pd.read_csv("./shujv.cvs",delimiter=",",encoding="utf-8",header=0)

      #delimiter以怎么样的方式来分割;解码方式utf-8;设置0行为头部

    2. 向csv中写入数据

      df.to_csv("./ababab.csv",columns=["寶貝","价格"],index=False,header=True)

      不要索引,以列头这两行导入

    3. 数据选取

      • 行的选取

        rows =df[0:3]

        选择第0行到第2行数据

        r=df.head()

        选取前五行

      • 列的选取

        cols =df[['宝贝','价格']]

      • 取0到3行的宝贝和价格

        df.loc[0:3,['宝贝','价格']]

      • 操作行和块

        从已有的列中创建一个新列

        df['销售额']=df['价格']*df['成交量']

        df.head()#查看一下前五行数据

      • 根据条件过滤行

        df1=[(df["价格"]<100)&(df["成交量"]>1000)]

        筛选出,价格小于100,成交量大于1000的数据

    4. 数据整理

      image-20211019232719766

      image-20211019232747465

    5. 数据描述

    image-20211019232806912

    image-20211019232821399

    4.2.2 数据分组、分割、合并和变形

    1. 分组

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzhROGsp-1634735959479)(C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20211019232946860.png)]

    image-20211019233010062

    image-20211019233047585

    1. 分割

      前闭后开

      image-20211019233306157

    2. 合并

      • dataframe合并

        pd.merge(df1,df2,how='left',on="卖家")#左连接

        pd.merge(df1,df2,how='outer',on="卖家")#外连接

        pd.merge(df1,df2,how='right',on="卖家")#右

        不指定on那个列就默认相同的选择列名相同的一列

      • 索引合并

        image-20211019233905361

      • 轴向连接

      按axis=1列拼接,axis为0就是按行,默认就是行。

      pd.contact([col1,col2,col3],axis=1)

    3. 变形

      • 重塑层次化

        image-20211019234429354

        image-20211019234448536

        • 数据透视表:

          image-20211019234608116

    4.2.3 缺失值

    image-20211019234809671

    image-20211019234823062

    5. 数据可视化

    5.1 matplotlib绘图操作:

    1. 初始化,导库,乱码,设定背景

      import matplotlib

      import matplotlit.pylot

    2. 生成一个画布(规定画布大小,坐标系)

      fig,axes =plt.subplots(1,2,figsize=(12,5))

    3. 绘图(形状)

      axes[0].hit(df,bins=20)

    4. 自动调整样式

      fig.tight_layout()

    5.2 案例

    b

    image-20211019235826937

    image-20211020000107325

    image-20211020000142674

    展开全文
  • 中国天气网爬虫数据可视化

    千次阅读 2021-02-08 14:54:56
    目录中国天气网爬虫数据可视化爬虫功能网页分析以华北地区为例分析网页源代码1.以谷歌浏览器为例,打开[华北](http://www.weather.com.cn/textFC/hb.shtml)地区天气预报,鼠标右键点击 检查,找到Elements2. 找到...

    中国天气网爬虫数据可视化

    感谢阅读最爱小鱼果的博客。

    本篇博客在于记录本人学习爬虫过程中的一些项目案例,如有错误还请大家批评指正!

    爬虫功能

    大家好,我来讲讲怎么用python对中国天气网进行爬取并且对爬取到的数据进行数据可视化的显示:

    1. 爬取全国各个城市的气温(最高气温,最低气温);
    2. 获取全国城市中气温最低最高的前十名城市(地区)进行可视化操作(以直方图的形式给出展示形式为 .html格式)

    网页分析

    首先打开中国天气网,找到全国各个区域(华北东北华东华中华南西北西南港澳台)天气信息。

    以华北地区为例分析网页源代码

    1.以谷歌浏览器为例分析

    打开谷歌浏览器,打开华北地区天气预报,鼠标右键点击 检查,找到Elements
    如图所示:
    华北地区

    2. 提取特征标签

    找到我们所需要的信息所在的网页源代码特征标签
    在这里插入图片描述
    获取所有<tably>标签。
    分析可知所有城市天气信息在<tably>标签下的<tr>标签
    获取所有<tr>标签。

    在对应的<tr>标签中找到城市所在代码区域:
    城市

    3.分析源代码

    分析网页源代码可知,前两个<tr>标签为表头信息,第一个<td>标签为省会(直辖市),为冗余信息。

    利用requests库获取目标网页源代码

    若没有安装则运行cmd命令,输入pip install requests

    #	utf-8
    	import requests
    	header = {
    	    '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',
    	    # 'Referer': 'http://www.weather.com.cn/textFC/hb.shtml'
    	} # 模拟浏览器
    	response = requests.get(url=url, headers=header) # 发送get命令
    	text = response.content.decode('utf-8') # 解码方式为utf-8
    

    利用BeautifulSoup库提取天气信息

    上面我们分析了目标网页源代码,知道了我们所需要的信息所在的区域,利用BeautifulSoup库获取。
    若没有安装则运行cmd命令,输入pip install bs4进行安装

    #	utf-8
    	from bs4 import BeautifulSoup
    	ALL_DATA = []
    	# text用requests库获取
    	soup = BeautifulSoup(text,'lxml') # 以lxml方式解析
    	conMidtab = soup.find('div',class_='conMidtab')
    	tables = conMidtab.find_all('table')
    	for table in tables:
    	    trs = table.find_all('tr')[2:]
    	    for tr in trs:
    	        tds = tr.find_all('td')
    	        chengs = list(tds[-8].stripped_strings)[0] # 倒数第8个为城市信息
    	        maxtemp = list(tds[-5].stripped_strings)[0] # 倒数第5个位最高气温
    	        mintemp = list(tds[-2].stripped_strings)[0] # 倒数第2个为最低气温
    	        ALL_DATA.append({"城市":chengs,"最高气温":int(maxtemp),"最低气温":int(mintemp)})
    

    ALL_DATA就是我们所需要的全部信息。

    港澳台地区代码分析

    因为在港澳台地区天气数据的网页代码,并不知道严格的标准html语法,<tably>标签并不成对出现。因此使用lxml解析就会出错。这里应该使用容错能力强的html5lib进行解析。但是html5lib进行解析的话会比使用lxml解析慢不少,因此除港澳台以为我们依然采用lxml进行解析。
    若没有安装则运行cmd命令,输入pip install html5lib进行安装

        urls = {
            'http://www.weather.com.cn/textFC/hb.shtml',
            'http://www.weather.com.cn/textFC/db.shtml',
            'http://www.weather.com.cn/textFC/hd.shtml',
            'http://www.weather.com.cn/textFC/hz.shtml',
            'http://www.weather.com.cn/textFC/hn.shtml',
            'http://www.weather.com.cn/textFC/xb.shtml',
            'http://www.weather.com.cn/textFC/xn.shtml'
        }
        for url in urls:
            parse_page(url,'lxml')
        url_gat = 'http://www.weather.com.cn/textFC/gat.shtml'
        parse_page(url_gat,'html5lib')
    

    分析数据

    ALL_DATA进行排序,获取前十位数据(最低气温)和后十位数据(最高气温)。

    	ALL_DATA.sort(key=lambda data:data["最低气温"])
    	min_data = ALL_DATA[:10]
    	ALL_DATA.sort(key=lambda data:data["最高气温"])
    	max_data = ALL_DATA[-10:-1]
    

    数据可视化

    这里要用到pyecharts库
    安装方法:运行cmd命令,输入pip install bs4

        cities_min = list(map(lambda x:x["城市"], min_data))
        cities_max = list(map(lambda x:x["城市"], max_data))
        min_temp = list(map(lambda x:x["最低气温"], min_data))
        max_temp = list(map(lambda x: x["最高气温"], max_data))
    
        bar1 = Bar()
        bar1.add_xaxis(cities_min)
        bar1.add_yaxis("气温/℃", min_temp)
        bar1.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最低气温"})
        bar1.render("最低气温.html")
        bar2 = Bar()
        bar2.add_xaxis(cities_max)
        bar2.add_yaxis("气温/℃", max_temp)
        bar2.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最高气温"})
        bar2.render("最高气温.html")
    

    结果展示

    在代码所在目录自动生成 最低气温.html文件和最高气温.html文件。

    打开文件:最低气温.html

    2021.2.28
    最低气温

    打开文件:最高气温.html

    2021.2.28
    最高气温

    总结

    首先分析网页代码,找到所需信息对应的标签,然后对信息进行提取。再使用可视化工具库进行可视化操作。
    中国天气网网站源代码简单,易于获取天气信息,非常适合新手来练习。最后附整个源代码!
    重申:本篇博客在于记录本人学习爬虫过程中的一些项目案例,如有错误还请大家批评指正!
    如需引用则请注明出处!感谢大家阅读!

    最后附整个源代码!

    import requests
    from bs4 import BeautifulSoup
    from pyecharts.charts import Bar
    
    ALL_DATA = []
    
    def parse_page(url,jiex):
        header = {
            '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',
            # 'Referer': 'http://www.weather.com.cn/textFC/hb.shtml'
        }
        response = requests.get(url=url, headers=header)
        text = response.content.decode('utf-8')
        soup = BeautifulSoup(text,jiex)
        conMidtab = soup.find('div',class_='conMidtab')
        tables = conMidtab.find_all('table')
        for table in tables:
            trs = table.find_all('tr')[2:]
            for tr in trs:
                tds = tr.find_all('td')
                chengs = list(tds[-8].stripped_strings)[0]
                maxtemp = list(tds[-5].stripped_strings)[0]
                mintemp = list(tds[-2].stripped_strings)[0]
                ALL_DATA.append({"城市":chengs,"最高气温":int(maxtemp),"最低气温":int(mintemp)})
    
    def main():
        urls = {
            'http://www.weather.com.cn/textFC/hb.shtml',
            'http://www.weather.com.cn/textFC/db.shtml',
            'http://www.weather.com.cn/textFC/hd.shtml',
            'http://www.weather.com.cn/textFC/hz.shtml',
            'http://www.weather.com.cn/textFC/hn.shtml',
            'http://www.weather.com.cn/textFC/xb.shtml',
            'http://www.weather.com.cn/textFC/xn.shtml'
        }
        for url in urls:
            parse_page(url,'lxml')
        url_gat = 'http://www.weather.com.cn/textFC/gat.shtml'
        parse_page(url_gat,'html5lib')
    
        # 分析数据
        ALL_DATA.sort(key=lambda data:data["最低气温"])
        min_data = ALL_DATA[:10]
        ALL_DATA.sort(key=lambda data:data["最高气温"])
        max_data = ALL_DATA[-10:-1]
        # 数据可视化
        cities_min = list(map(lambda x:x["城市"], min_data))
        cities_max = list(map(lambda x:x["城市"], max_data))
        min_temp = list(map(lambda x:x["最低气温"], min_data))
        max_temp = list(map(lambda x: x["最高气温"], max_data))
    
        bar1 = Bar()
        bar1.add_xaxis(cities_min)
        bar1.add_yaxis("气温/℃", min_temp)
        bar1.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最低气温"})
        bar1.render("最低气温.html")
        bar2 = Bar()
        bar2.add_xaxis(cities_max)
        bar2.add_yaxis("气温/℃", max_temp)
        bar2.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最高气温"})
        bar2.render("最高气温.html")
    
    if __name__ == '__main__':
        main()
    
    展开全文
  • 爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种: 文件:txt、csv、excel、json等,保存数据量小。 关系型数据库:mysql、oracle等,保存数据量大。 非关系型数据库:...

    爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种:

    • 文件:txt、csv、excel、json等,保存数据量小。
    • 关系型数据库:mysql、oracle等,保存数据量大。
    • 非关系型数据库:Mongodb、Redis等键值对形式存储数据,保存数据量大。
    • 二进制文件:保存爬取的图片、视频、音频等格式数据。

    首先,爬取豆瓣读书《平凡的世界》的3页短评信息,然后保存到文件中。

    https://book.douban.com/subject/1200840/comments/

    「具体代码如下(忽略异常):」

    import requests
    from bs4 import BeautifulSoup
    
    urls=['https://book.douban.com/subject/1200840/comments/?start={}&limit=20&status=P&sort=new_score'.format(str(i)) for i in range(0, 60, 20)] #通过观察的url翻页的规律,使用for循环得到3个链接,保存到urls列表中
    print(urls)
    dic_h = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
    comments_list = [] #初始化用于保存短评的列表
    
    for url i
    展开全文
  • 爬虫数据提取-xpath

    千次阅读 2021-11-20 10:43:39
    要想利用lxml模块提取数据,需要我们掌握xpath语法规则。xpath helper插件可以帮助我们练习xpath语法。 谷歌浏览器xpath helper插件的作用:在谷歌浏览器中对当前页面测试xpath语法规则。 谷歌浏览器xpath helper...
  • 文章目录整理模板说明业务目标及操作Scrapy 模板操作流程项目创建shell项目默认文件生成配置配置 items.py配置 middlewares.py配置 pipelines.py配置 settings.py数据抓取Spider模板Spider下每个py文件parse_detail....
  • import csv import codecs 生成表格文件 # f = codecs.open("dianying.csv", "a", "gbk") # cswriter = csv.writer(f) 写入每一行数据 # cswriter.writerow(data数据)
  • 程序开发软件:Pycharm 数据库:mysql 现在介绍的是一个用Python开发的爬取二手车网站数据及其分析的程序。爬取的时候采用selenium驱动google浏览器进行数据的...然后数据的展示采用pyecharts,它是一个用于生成...
  • Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据。例如知乎回答列表、微博热门、微博评论、淘宝、天猫...
  • MySQL5.5 安装一直停在最后一步解决方法 首先,下载好MySQL,用pip安装好pymysql库,连接python和mysql。 pip install pymysql import pymysql import requests from bs4 import BeautifulSoup ...
  • 本文主要基于从安居客网爬取到的二手房小区数据,获取到的数据格式如下图,将其中的小区地址字段通过地址转换器转换为经纬度,然后导入进ArcGIS,根据二手房小区的总户数字段,通过点与面的数据连接,统计每个网格...
  • 零基础对数据感兴趣却无从下手的人……课程概述有意向转行/跳槽/技能升级/应届毕业生入职数据分析的入职数据分析,不可不知的一些职场"门道"购课价值超过100元可提供纸质发票,邮寄到付。课程简介/收获:Python 作为...
  • 全网最全python爬虫+数据分析资源整理

    千次阅读 多人点赞 2021-04-29 14:08:36
    你为什么需要数据分析能力? 第一模块:数据分析基础篇 (16讲) 01丨数据分析全景图及修炼指南 02丨学习数据挖掘的最佳路径是什么? 03丨Python基础语法:开始你的Python之旅 04丨Python科学计算:用NumPy快速处理...
  • 这篇文章是看了@小M姐姐呀~的一篇《利用...首先这次我是用东方财富网的数据,个人也曾经是个小股民,喜欢看技术流多于热点事件,北向资金的流向也是在股票分析中比较重要的一个指标,这次就了一下北向资金近一年的持.
  • DouYinSDK 抖音爬虫数据采集福音

    千次阅读 2021-02-04 17:13:10
    热榜品牌详情result = sdk.BrandDetail(2,9117) 原文地址:https://segmentfault.com/a/1190000021672921,作者:2end0 以上就是对DouYinSDK 抖音爬虫数据采集福音的相关介绍,希望对您学习有所帮助,感谢您关注懒咪IT...
  • Python 网络爬虫及数据可视化

    千次阅读 2021-01-11 18:47:13
    1.3 数据可视化 2 1.4 Python环境介绍 2 1.4.1 简介 2 1.4.2 特点 3 1.5 扩展库介绍 3 1.5.1 安装模块 3 1.5.2 主要模块介绍 3 ① pandas模块 3 ② requests模块 4 ③ bs4模块 4 ④ selenium模块 4 ⑤ matplotlib...
  • Python爬虫以及数据可视化分析

    万次阅读 多人点赞 2020-12-25 17:43:30
    Python爬虫以及数据可视化分析之B站动漫排行榜信息爬取分析 简书地址:https://www.jianshu.com/u/40ac87350697 简单几步,通过Python对B站番剧排行数据进行爬取,并进行可视化分析 源码文件可以参考Github上传的...
  • password='root', host='127.0.0.1', port=3306, database='test_demo', use_unicode=True, charset="utf8" ) #获取游标 cursor = conn.cursor() #插入数据,注意看有变量的时候格式 cursor.execute("INSERT ...
  • python爬虫及数据可视化分析

    千次阅读 多人点赞 2021-01-07 09:46:58
    数据爬取 2.1定位到爬取数据 打开我们要爬取的网页,右键选择检查,在窗口中单击左上角箭头,即可查看我们需要爬取的内容: 2.2爬虫实现方法 我们要爬取一个网页,首先我们需要向网页发送一个请求,然后用get方法抓取...
  • Python爬虫+数据可视化教学:分析猫咪交易数据

    千次阅读 多人点赞 2021-08-06 19:08:10
    网上的数据太多、太杂,而且我也不知道哪个网站的数据比较好。所以,只能找到一个猫咪交易网站的数据来分析了 地址: http://www.maomijiaoyi.com/ 爬虫部分 请求数据 import requests url = f'...
  • Python爬虫和数据可视化总结

    千次阅读 2021-09-15 19:43:41
    爬取数据并存入数据库 一.导入需要的包 from bs4 import BeautifulSoup # 网页解析,获取数据 import re # 正则表达式,进行文字匹配 import xlwt # 进行excel操作 import urllib.request, urllib.parse # 指定URL,...
  • rv:86.0) Gecko/20100101 Firefox/86.0" } # 设置UA伪装为火狐流浪器 page_text = requests.get(url=url, headers=headers).text # 发送请求,并把响应数据存成text格式 tree = etree.HTML(page_text) # 用xpath...
  • Python爬虫以及数据可视化分析!

    千次阅读 2021-01-14 06:18:33
    原标题:Python爬虫以及数据可视化分析!简单几步,通过Python对B站番剧排行数据进行爬取,并进行可视化分析源码文件可以参考Github上传的项目:https://github.com/Lemon-Sheep/Py/tree/master下面,我们开始吧!PS...
  • 利用EXCEL进行数据爬虫

    千次阅读 2021-06-24 20:52:08
    python在最近几年确实热火朝天,对于不会编程人员来说,利用好EXCEL一样也可以爬取一些简单的数据,并且方式非常简单。 1.爬取东方财富网上基金信息。网址为:http://fund.eastmoney.com/trade/pg.html 2.在...
  • 爬虫数据写mysql、redis、es

    千次阅读 2021-12-12 12:14:54
    1、sqlalchemy实现orm层,保存企业详情链接;对象转字典;mysql管道 2、分布式爬虫,redis 3、数据写es
  • 关于爬虫解析数据的4种方式

    千次阅读 多人点赞 2021-11-22 10:51:50
    爬虫之解析数据的4种方式:XPath解析数据、BeautifulSoup解析数据、正则表达式、pyquery解析数据
  • #导包(因为python有mysql数据库的包,所以可以直接引用,如果自己的python环境中没有,则可以用pip install pymysql进行下载)import pymysql# 定义保存数据库函数def save_mysql(需要添加的数据名称):# 设置mysql...
  • 毕业设计:爬虫及数据分析

    千次阅读 2021-01-14 09:44:30
    本科阶段即将落幕,我本科最后一项任务毕业设计也进入尾声。指导老师跟我说,本科毕业设计不需要创新,但是工作量一定要够,...爬虫简单介绍所谓爬虫就是编写代码从网页上取自己想要的数据,代码的质量决定了你能...
  • python爬虫课设-爬取3000条数据并做数据可视化

    千次阅读 多人点赞 2021-08-23 20:22:36
    文章目录作业要求数据爬取爬取结果数据处理数据可视化大作业文档 作业要求 《Python与数据分析》期末大作业要求(2020-2021学年第2学期) 一、期末作业要求: 1、在前期作业爬取的数据基础上,用Python编写代码对爬取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 329,062
精华内容 131,624
关键字:

爬数据