zoukankan      html  css  js  c++  java
  • 数据分析实战(8-10)-数据采集简介&八爪鱼采集工具&python爬虫

    08 数据采集:如何自动化采集数据?

    重点介绍爬虫做抓取

    1.Python 爬虫

        1)使用 Requests 爬取内容。我们可以使用 Requests 库来抓取网页信息。Requests 库可以说是 Python 爬虫的利器,也就是 Python 的 HTTP 库,通过这个库爬取网页中的数据,非常方便,可以帮我们节约大量的时间。

        2)使用 XPath 解析内容。XPath 是 XML Path 的缩写,也就是 XML 路径语言。它是一种用来确定 XML 文档中某部分位置的语言,在开发中经常用来当作小型查询语言。XPath 可以通过元素和属性进行位置索引。

        3)使用 Pandas 保存数据。Pandas 是让数据分析工作变得更加简单的高级数据结构,我们可以用 Pandas 保存爬取的数据。最后通过 Pandas 再写入到 XLS 或者 MySQL 等数据库中。Requests、XPath、Pandas 是 Python 的三个利器。当然做 Python 爬虫还有很多利器,比如 Selenium,PhantomJS,或者用 Puppeteer 这种无头模式。##这里可以实践一下

    2.抓取工具

        1)火车采集器

        2)八爪鱼

        3)集搜客

    09 数据采集:如何用八爪鱼采集微博上的“D&G”评论

    八爪鱼傻瓜软件,操作非常方便,比python爬虫更容易上手用

    10 Python爬虫:如何自动化下载王祖贤海报?

    python爬虫笔记中介绍了用urlretrieve可以下载xpath的非结构化数据,参考:爬虫3-python爬取非结构化数据下载到本地 

    这篇教程是从JSON和Xpath来介绍补充

    如何使用 JSON 数据自动下载王祖贤的海报

    这里我们用的url:https://www.douban.com/j/search_photo?q=%E7%8E%8B%E7%A5%96%E8%B4%A4&limit=20&start=0(这里给出的是json的链接。有时候显示会有细微不同,方法是:用Chrome浏览器的开发者工具,可以监测出来网页中是否有json数据的传输),打开JSON格式的,解析发现结构是:

    {"images":
           [{"src": …, "author": …, "url":…, "id": …, "title": …, "width":…, "height":…},
        …
       {"src": …, "author": …, "url":…, "id": …, "title": …, "width":…, "height":…}],
    "total":26069,"limit":20,"more":true}

     不如先用第一个页面上手来个下载小例子:

    # -*- coding: utf-8 -*
    import requests
    import json
    
    query = '王祖贤'
    url = 'https://www.douban.com/j/search_photo?q=' + 'query' + '&limit=20&start=0'
    headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000 "
        }
    html = requests.get(url, headers=headers).text   # 得到返回结果,是一个json格式
    response = json.loads(html, encoding='utf-8')  # 将 JSON 格式转换成 Python 对象
    i=0
    for image in response['images']:
        print(i)
        img_src = image['src']    #image是一个dict
        pic = requests.get(img_src, timeout=10)     #这时候image其实是动态页面 XHR 数据。还需要再请求对应的url
       filename='C:/Users/.../image_json_test/'+str(i)+'.jpg'
        fp=open(filename,'wb')   #'b一般处理非结构化如图片,wb有文件则覆盖,无文件则新增'
        fp.write(pic.content)   #注意这里content
        fp.close()
        i+=1

    这里我们只爬取了20张图片,从上面的json串:"total":26069,"limit":20,"more":true我们知道总数量26069,每20张分页,要爬取更多,我们可以将图片download写成幻术,控制url翻页循环:

    import requests
    import json
    
    query = '王祖贤'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000 "
    }
    
    def download(src, id):  # 图片下载函数
        filename = 'C:/Users/luxia/PycharmProjects/shujuyunying/image_json_test/' + str(id) + '.jpg'
        try:
            pic = requests.get(src, timeout=10)
            f = open(filename, 'wb')
            f.write(pic.content)
            f.close()
        except requests.exceptions.ConnectionError:
            print('图片无法下载')
    
    ''' for 循环 请求全部的 url '''
    for i in range(20, 26069, 20):
        url = 'https://www.douban.com/j/search_photo?q=' + query + '&limit=20&start=' + str(i)
        html = requests.get(url, headers=headers).text  # 得到返回结果
        response = json.loads(html, encoding='utf-8')  # 将 JSON 格式转换成 Python 对象
        for image in response['images']:
            img_src = image['src']  # 当前下载的图片网址
            download(img_src, image['id'])  # 下载一张图片

    如何使用 XPath 自动下载王祖贤的电影海报封面

    JSON 的数据格式数据结构很清爽,通过 Python 的 JSON 库就可以解析。

    但有时候,网页会用 JS 请求数据,那么只有 JS 都加载完之后,我们才能获取完整的 HTML 文件。XPath 可以不受加载的限制,帮我们定位想要的元素。

    讲义中推荐使用XPath Helper 插件获取Xpath路径,其中在浏览器 中可以用f12开启开发者模式点选页面元素查看xpath,在HTML中右键也可以复制粘贴xpath路径,具体可以参考爬虫相关的博文。

    有时候当我们直接用 Requests 获取 HTML 的时候,发现想要的 XPath 并不存在。这是因为 HTML 还没有加载完,因此你需要一个工具,来进行网页加载的模拟,直到完成加载后再给你完整的 HTML。在 Python 中,这个工具就是 Selenium 库(这里暂时不涉及)。

  • 相关阅读:
    第一章:简介
    2018年10月底新公司
    第四章:集成
    第三章:如何建模服务
    第二章:演化架构师
    第一章:微服务
    4、工厂模式
    5、单例模式
    8、模板方法模式
    3、字典介绍
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14284017.html
Copyright © 2011-2022 走看看