數據分析實戰(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 庫(這里暫時不涉及)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM