教你如何編寫第一個簡單的爬蟲

好書精選發表於2020-02-16

很多人知道爬蟲,也很想利用爬蟲去爬取自己想要的資料,那麼爬蟲到底怎麼用呢?今天就教大家編寫一個簡單的爬蟲。

下面以爬取筆者的個人部落格網站為例獲取第一篇文章的標題名稱,教大家學會一個簡單的爬蟲。

第一步:獲取頁面

#!/usr/bin/python
# coding: utf-8

import requests #引入包requests
link = "http://www.santostang.com/" #定義link為目標網頁地址
# 定義請求頭的瀏覽器代理,偽裝成瀏覽器
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 

r = requests.get(link, headers= headers) #請求網頁
print (r.text)  #r.text是獲取的網頁內容程式碼

上述程式碼就能獲取部落格首頁的HTML程式碼,HTML是用來描述網頁的一種語言,也就是說網頁呈現的內容背後都是HTML程式碼。如果你對HTML不熟悉的話,可以先去w3school(http://www.w3school.com.cn/html/index.asp)學習一下,大概花上幾個小時就可以瞭解HTML。

在上述程式碼中,首先import requests引入包requests,之後獲取網頁。

(1)首先定義link為目標網頁地址。

(2)之後用headers來定義請求頭的瀏覽器代理,進行偽裝

(3)r是requests的Response回覆物件,我們從中可以獲取想要的資訊。r.text是獲取的網頁內容程式碼。

執行上述程式碼得到的結果如圖所示。
在這裡插入圖片描述

第二步:提取需要的資料

#!/usr/bin/python
# coding: utf-8

import requests
from bs4 import BeautifulSoup     #從bs4這個庫中匯入BeautifulSoup

link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 
r = requests.get(link, headers= headers)

soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析

#找到第一篇文章標題,定位到class是"post-title"的h1元素,提取a,提取a裡面的字串,strip()去除左右空格
title = soup.find("h1", class_="post-title").a.text.strip()
print (title)

在獲取整個頁面的HTML程式碼後,我們需要從整個網頁中提取第一篇文章的標題。

這裡用到BeautifulSoup這個庫對頁面進行解析,BeautifulSoup將會在第4章進行詳細講解。首先需要匯入這個庫,然後把HTML程式碼轉化為soup物件,接下來用soup.find(“h1”,class_=“post-title”).a.text.strip()得到第一篇文章的標題,並且列印出來

soup.find(“h1”,class_=“post-title”).a.text.strip()的意思是,找到第一篇文章標題,定位到class是"post-title"的h1元素,提取a元素,提取a元素裡面的字串,strip()去除左右空格。

對初學者來說,使用BeautifulSoup從網頁中提取需要的資料更加簡單易用。

那麼,我們怎麼從那麼長的程式碼中準確找到標題的位置呢?

這裡就要隆重介紹Chrome瀏覽器的“檢查(審查元素)”功能了。下面介紹找到需要元素的步驟。

步驟01 使用Chrome瀏覽器開啟部落格首頁www.santostang.com。右擊網頁頁面,在彈出的快捷選單中單擊“檢查”命令,如圖2-17所示。

在這裡插入圖片描述

步驟02 出現如圖2-18所示的審查元素頁面。單擊左上角的滑鼠鍵按鈕,然後在頁面上單擊想要的資料,下面的Elements會出現相應的code所在的地方,就定位到想要的元素了。

在這裡插入圖片描述

圖2-18 審查元素頁面

步驟03 在程式碼中找到標藍色的地方,為

echarts學習筆記(2)–同一頁面多圖表。我們可以用soup.find("h1",class_="post-title").a.text.strip()提取該博文的標題。

第三步:儲存資料

import requests
from bs4 import BeautifulSoup   #從bs4這個庫中匯入BeautifulSoup

link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 
r = requests.get(link, headers= headers)

soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
title = soup.find("h1", class_="post-title").a.text.strip()
print (title)

# 開啟一個空白的txt,然後使用f.write寫入剛剛的字串title
with open('title_test.txt', "a+") as f:
    f.write(title)

儲存到本地的txt檔案非常簡單,在第二步的基礎上加上2行程式碼就可以把這個字串儲存在text中,並儲存到本地。txt檔案地址應該和你的Python檔案放在同一個資料夾。

返回資料夾,開啟title.txt檔案,其中的內容如圖2-19所示。
在這裡插入圖片描述
以上內容就是本節要介紹的如何編寫一個簡單的爬蟲的步驟,想要學更多爬蟲相關的內容,可以到這本書裡查哦《Python網路爬蟲從入門到實踐(第2版)》
在這裡插入圖片描述

目錄

前言
第1章 網路爬蟲入門1
1.1 為什麼要學網路爬蟲2
1.1.1 網路爬蟲能帶來什麼好處2
1.1.2 能從網路上爬取什麼資料3
1.1.3 應不應該學爬蟲3
1.2 網路爬蟲是否合法3
1.2.1 Robots協議4
1.2.2 網路爬蟲的約束5
1.3 網路爬蟲的基本議題6
1.3.1 Python爬蟲的流程7
1.3.2 三個流程的技術實現7
第2章 編寫第一個網路爬蟲9
2.1 搭建Python平臺10
2.1.1 Python的安裝10
2.1.2 使用pip安裝第三方庫12
2.1.3 使用編輯器Jupyter 程式設計13
2.1.4 使用編輯器Pycharm程式設計15
2.2 Python 使用入門18
2.2.1 基本命令18
2.2.2 資料型別19
2.2.3 條件語句和迴圈語句21
2.2.4 函式23
2.2.5 物件導向程式設計24
2.2.6 錯誤處理28
2.3 編寫第一個簡單的爬蟲29
2.3.1 第一步:獲取頁面29
2.3.2 第二步:提取需要的資料30
2.3.3 第三步:儲存資料32
2.4 Python實踐:基礎鞏固33
2.4.1 Python基礎試題34
2.4.2 參考答案35
2.4.3 自我實踐題38
第3章 靜態網頁抓取39
3.1 安裝Requests40
3.2 獲取響應內容40
3.3 定製Requests41
3.3.1 傳遞URL引數41
3.3.2 定製請求頭42
3.3.3 傳送POST請求43
3.3.4 超時44
3.4 Requests爬蟲實踐:TOP250電影資料44
3.4.1 網站分析45
3.4.2 專案實踐45
3.4.3 自我實踐題47
第4章 動態網頁抓取48
4.1 動態抓取的例項49
4.2 解析真實地址抓取50
4.3 通過Selenium模擬瀏覽器抓取55
4.3.1 Selenium的安裝與基本介紹55
4.3.2 Selenium的實踐案例57
4.3.3 Selenium獲取文章的所有評論58
4.3.4 Selenium的高階操作61
4.4 Selenium爬蟲實踐:深圳短租資料64
4.4.1 網站分析64
4.4.2 專案實踐66
4.4.3 自我實踐題69
第5章 解析網頁70
5.1 使用正規表示式解析網頁71
5.1.1 re.match方法71
5.1.2 re.search方法74
5.1.3 re.findall方法74
5.2 使用BeautifulSoup解析網頁76
5.2.1 BeautifulSoup的安裝76
5.2.2 使用BeautifulSoup獲取部落格標題77
5.2.3 BeautifulSoup的其他功能78
5.3 使用lxml解析網頁82
5.3.1 lxml的安裝82
5.3.2 使用lxml獲取部落格標題82
5.3.3 XPath的選取方法84
5.4 總結85
5.5 BeautifulSoup爬蟲實踐:房屋價格資料86
5.5.1 網站分析86
5.5.2 專案實踐87
5.5.3 自我實踐題89
第6章 資料儲存90
6.1 基本儲存:儲存至TXT或CSV91
6.1.1 把資料儲存至TXT91
6.1.2 把資料儲存至CSV93
6.2 儲存至MySQL資料庫94
6.2.1 下載安裝MySQL95
6.2.2 MySQL的基本操作99
6.2.3 Python操作MySQL資料庫104
6.3 儲存至MongoDB資料庫106
6.3.1 下載安裝MongoDB107
6.3.2 MongoDB的基本概念110
6.3.3 Python操作MongoDB資料庫112
6.3.4 RoboMongo的安裝與使用113
6.4 總結115
6.5 MongoDB爬蟲實踐:虎撲論壇116
6.5.1 網站分析116
6.5.2 專案實踐117
6.5.3 自我實踐題123
第7章 Scrapy框架124
7.1 Scrapy是什麼125
7.1.1 Scrapy架構125
7.1.2 Scrapy資料流(Data Flow)126
7.1.3 選擇Scrapy還是Requests+bs4127
7.2 安裝Scrapy128
7.3 通過Scrapy抓取部落格128
7.3.1 建立一個Scrapy專案128
7.3.2 獲取部落格網頁並儲存129
7.3.3 提取部落格標題和連結資料131
7.3.4 儲存部落格標題和連結資料133
7.3.5 獲取文章內容134
7.3.6 Scrapy的設定檔案136
7.4 Scrapy爬蟲實踐:財經新聞資料137
7.4.1 網站分析137
7.4.2 專案實踐138
7.4.3 自我實踐題141
第8章 提升爬蟲的速度142
8.1 併發和並行,同步和非同步143
8.1.1 併發和並行143
8.1.2 同步和非同步143
8.2 多執行緒爬蟲144
8.2.1 簡單的單執行緒爬蟲145
8.2.2 學習Python多執行緒145
8.2.3 簡單的多執行緒爬蟲148
8.2.4 使用Queue的多執行緒爬蟲150
8.3 多程式爬蟲153
8.3.1 使用multiprocessing的多程式爬蟲153
8.3.2 使用Pool + Queue的多程式爬蟲155
8.4 多協程爬蟲158
8.5 總結160
第9章 反爬蟲問題163
9.1 為什麼會被反爬蟲164
9.2 反爬蟲的方式有哪些164
9.2.1 不返回網頁165
9.2.2 返回非目標網頁165
9.2.3 獲取資料變難166
9.3 如何“反反爬蟲”167
9.3.1 修改請求頭167
9.3.2 修改爬蟲的間隔時間168
9.3.3 使用代理171
9.3.4 更換IP地址172
9.3.5 登入獲取資料172
9.4 總結172
第10章 解決中文亂碼173
10.1 什麼是字元編碼174
10.2 Python的字元編碼176
10.3 解決中文編碼問題179
10.3.1 問題1:獲取網站的中文顯示亂碼179
10.3.2 問題2:非法字元丟擲異常180
10.3.3 問題3:網頁使用gzip壓縮181
10.3.4 問題4:讀寫檔案的中文亂碼182
10.4 總結184
第11章 登入與驗證碼處理185
11.1 處理登入表單186
11.1.1 處理登入表單186
11.1.2 處理cookies,讓網頁記住你的登入190
11.1.3 完整的登入程式碼193
11.2 驗證碼的處理194
11.2.1 如何使用驗證碼驗證195
11.2.2 人工方法處理驗證碼197
11.2.3 OCR處理驗證碼200
11.3 總結203
第12章 伺服器採集204

此書已加入到VIP會員卡,只要購買VIP會員卡即可免費閱讀上百本電子書,這張VIP卡除了免費讓你讀書,還有更多的權益等你來領,往下↓拉
在這裡插入圖片描述

閱讀電子書的方法如下:

開啟CSDN APP(軟體商城搜尋“CSDN”即可找到哦)—>登入CSDN賬號—>學習—>電子書

在這裡插入圖片描述

相關文章