1. 程式人生 > 其它 >python 簡單爬蟲

python 簡單爬蟲

爬蟲程式並不複雜,其框架簡單明瞭,如果想要在日常生活中使用爬蟲程式爬取一些你想要的資料,最有效的方式就是開啟你的python,去請求你想要的網頁的資料,當你成功獲取到響應資料後,就想方設法地解析得到你想要的資料,遇到一個問題解決一個問題,在你不斷成功獲取你想要的資料時,你爬取資料和解析資料的能力也就不斷積累起來了。

一、python爬蟲程式主結構

1、爬取網頁
def askUrl(url): # ask a web request. os.environ['NO_PROXY'] = 'movie.douban.com' # 解決此請求方式代理問題 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63" } req = requests.get(url, headers=headers)
print(req.status_code) # 檢視請求狀態(200為成功) html = "" try: html = req.content.decode("utf-8") print(html) except requests.exceptions.ConnectionError as e: print("url連線錯誤:", e) return html

使用python的requests庫可以輕鬆的爬取網頁,請求方式一般常用的有get方式和post方式。當響應碼code為200時,意味著我們成功地爬取到了網頁的資料。對於某些有反爬或者需要登入的網頁,可以進一步的設定代理、新增請求headers引數,常用的headers引數頭有"User-Agent”、“cookie"、"host"等,可在對應網頁開啟開發人員工具,在網路選項的請求標頭中獲取:

2、解析爬取的網頁資料

爬取到的網頁響應資料是html格式的資料,包含著網頁各個元素的資料,我們需要通過解析html,來獲取我們需要資料。現在python3常用的解析html資料的第三方庫為BeautifulSoup,也即bs4。下面是通過某構造的html資料,來說明bs4用法的例子,也是網上常見的內容。

假如某網頁的返回資料如下:

html_doc = """
<html>
<head>
    <title>The Dormouse's story</title>
    <title>The test's story</title>
</head>
<body>
<p class="title aq">
    <b>
        The Dormouse's story
    </b>
</p>

<tr >
    <th>
        "首量時間"
    </th>
    <td>
        2021-07-17
    </td>
    <th>
        "量產時間"
    </th>
    <td>
        2021-07-18
    </td>
</tr>

<p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> 
    and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.
</p>

現在我只想要其中"首量時間"和"量產時間"兩個資料,那麼我可以通過下面的解析方法來獲取:

def parseData(html):
    dataList = []
    data = []
    # html字串建立BeautifulSoup物件
    soup = BeautifulSoup(html, 'html.parser')
    sortSoup = soup.find_all('td')
    print(sortSoup)
    for sort in sortSoup:
        time = (sort.string).strip()
        data.append(time)
    dataList.append(data)
    return dataList

首先通過soup = BeautifulSoup(html, 'html.parser') 將html資料按標準的縮排格式輸出,然後通過 sortSoup = soup.find_all('td')找到我所需要的兩個時間資料,此時返回為:

<td>
        2021-07-17
</td>
<td>
        2021-07-18
</td>

很明顯包含不屬於資料的<td>和空格、換行等,再通過time = (sort.string).strip() 對資料進處理就得到了我們真正需要的"2021-07-17"、"2021-07-18"這兩個時間資料。

對於更復雜的html資料,使用上面簡單的解析方式可能並不能滿足,需要了解更多的bs4解析格式,或者使用正則法則(re庫)去解析得到我們需要的資料。

3、儲存資料/操作資料

解析得到我們需要的資料後,我們一般會儲存資料至Excel表格或資料庫等,下面是儲存至Excel表格的例子:

def saveDataToExcel(dataList):
    # 儲存資料到表格
    savePath = "timeData.xls"
    workBook = xlwt.Workbook(encoding='utf-8', style_compression=0)
    workSheet = workBook.add_sheet('機型各階段時間', cell_overwrite_ok=True)
    col = ("機型名", "首量時間", "量產時間")
    for i in range(0, 3):
        workSheet.write(0, i, col[i])
    for data in dataList:
        for j in range(0, 3):
            workSheet.write(1, j, data[j])
    workBook.save(savePath)

首先建立表格,並把表頭資料構建好,然後迴圈將資料寫入表格。對於資料庫也是一樣的,只不過多一個連線資料庫的初始化過程。

如果想要資料表現得更加直觀,我們可能還會用到第三方工具對資料進行展示,比如用Apache ECharts中各種豐富的表格模板來展示我們提取出的資料,我們需要進一步的操作我們的資料以使用模板。

二、爬蟲的要點

從前面爬蟲主體的介紹可以知道,其實爬蟲的步驟很清晰明瞭,第一步請求網頁,第二部解析資料、第三部儲存資料。那麼從這三個過程看出爬蟲的要點是什麼呢?我覺得至少有下面這兩點:

1、獲取到網頁正確的返回資料;

2、資料解析:包括對源資料進行提取的一個過程和資料儲存過程中的處理。

對於第1點,獲取到網頁正確相應資料是爬蟲的前提。你可能會遇到反爬的網頁、需要登入的網頁、你可能需要不止一個頁面的資料等等,這時候如何能夠得到網頁的正確響應,如何正確拼接不同頁面的網址就是你在請求網頁時需要解決的問題;

對於第2點,未經處理的資料等同於無用資料,一般我們想要爬取的網頁資料肯定不可能像前面例子中那樣簡單,這個時候如何快速準確地提取我們需要的資料就變得很重要,我們需要非常熟練地清楚bs4的各種解析方法,包括正則法則等其他一些資料解析的方法,以及使用第三方工具展示資料的處理方法,這個是爬蟲程式中佔比相當大的部分。

三、總結

爬蟲程式並不複雜,其框架簡單明瞭,如果想要在日常生活中使用爬蟲程式爬取一些你想要的資料,最有效的方式就是開啟你的python,去請求你想要的網頁的資料,當你成功獲取到響應資料後,就想方設法地解析得到你想要的資料,遇到一個問題解決一個問題,在你不斷成功獲取你想要的資料時,你爬取資料和解析資料的能力也就不斷積累起來了。