1. 程式人生 > >【Python爬蟲實戰】獲取2018年重慶智博會參會企業名單,用於市場洞察

【Python爬蟲實戰】獲取2018年重慶智博會參會企業名單,用於市場洞察

【背景】

做市場洞察,經常需要分析某個行業的Top客戶,通常會通過某種活動或某種機構獲取名單。網站上也能收集到,但是手工收集比較麻煩。

下面通過Python網路爬蟲 獲取2018年重慶智博會參會企業的名單來體驗,如何批量獲取目標網頁的名單。

【操作步驟】

1、分析網頁的地址結構

重慶智博會官網-展覽-展商名冊,第一頁如下:

首先分析網址:

總計27頁,每頁最多20個企業

從第2頁到第27頁,網址最後一個數字控制頁數。

嘗試一下第一頁 也通過該規則是否ok?下面2個網頁的內容是一樣的,因此可以統一網址規則。

得出網址規則:頁面數字在python程式碼中分別用1-27表示

2、分析網頁html程式碼結構

找出哪個欄位是提取企業名字的,用什麼正則表示式來提取內容。

第一頁有一個“華碩電腦”,在網頁原始碼中,CTRL+F,搜尋到“華碩電腦”,共出現了3次。

試下搜尋“<p class="zsmcc-org">華碩電腦</p> ”剛好匹配出唯一一個結果。

再試下搜尋 <p class="zsmcc-org">,匹配出20結果,剛好就是1頁中全部20家企業的名字。

結論:通過網頁標籤<p class="zsmcc-org">企業名字</p>,可以將本頁中所有企業名字找出來。

3、編寫爬蟲程式碼

#!/usr/bin/python3
#-*- coding: utf-8 -*-

import urllib.request
import urllib.error
import random
import re

#瀏覽器偽裝池,將爬蟲偽裝成瀏覽器,避免被網站遮蔽
uaPools=[
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    ]

#每爬取一頁,就隨機選取一種瀏覽器來偽裝
def randomUA():
    opener = urllib.request.build_opener()
    currUA = random.choice(uaPools)
    uaParm= ("User-Agent", currUA)
    opener.addheaders = [ua]
    urllib.request.install_opener(opener)
    print("當前使用的UA:"+str(currUA))

#頁面數從1到27
urlPrefix        = "https://www.smartchina-expo.cn/exhibition/roster-page-"
urlPostfix       = ".html"
pageStartIdx     = 1
pageEndIdx       = 27+1  #語法原因,由於從1開始爬取,陣列下標從1開始,因此最後一頁碼數要+1


#爬取網頁上的企業名字
for pageIdx in range(pageStartIdx, pageEndIdx):
    visitURL   = urlPrefix + str(pageIdx) + urlPostfix
    webData    =  urllib.request.urlopen(visitURL).read().decode("utf-8", "ignore")
    matchPat   ='<p class="zsmcc-org">(.*?)</p>'
    cusName    = re.compile(matchPat, re.S).findall(webData)
    print("===爬取第 " +str(pageIdx)+ " 頁(" + visitURL + ")的企業名單如下=====")
    for nameIdx in range(0, len(cusName)):
        print(cusName[nameIdx])

測試結果如下:

===爬取第 1 頁(https://www.smartchina-expo.cn/exhibition/roster-page-1.html)的企業名單如下===== 巨集碁 阿里巴巴(中國)網路技術有限公司 華碩電腦 中國航空工業集團有限公司 中國寶武鋼鐵集團有限公司 深圳華大基因科技有限公司 京東方科技集團股份有限公司 重慶長安汽車股份有限公司 中國通訊服務股份有限公司 中國建設銀行 國家開發銀行 中國電信集團公司 中國行動通訊集團公司 保利集團 中國鐵塔股份有限公司 中國聯通網路通訊集團有限公司 思科公司 中冶賽迪集團有限公司 重慶機電控股(集團)公司 中國石油天然氣集團有限公司 ===爬取第 2 頁(https://www.smartchina-expo.cn/exhibition/roster-page-2.html)的企業名單如下===== 中國中車集團有限公司 中國船舶重工集團有限公司 中軟國際有限公司

......