教你如何編寫第一個簡單的爬蟲
很多人知道爬蟲,也很想利用爬蟲去爬取自己想要的資料,那麼爬蟲到底怎麼用呢?今天就教大家編寫一個簡單的爬蟲。
下面以爬取筆者的個人部落格網站為例獲取第一篇文章的標題名稱,教大家學會一個簡單的爬蟲。
第一步:獲取頁面
#!/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所在的地方,就定位到想要的元素了。
步驟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卡除了免費讓你讀書,還有更多的權益等你來領,往下↓拉
購買連結:點我
買這個卡後不僅可以享受價值上萬元的電子書免費閱讀許可權
還可以享受到以下這些權益呢:
400次在CSDN下載頻道下載資源的機會
1000多門的課程可以免費看
購買CSDN學院課程可享受9折專屬優惠
CSDN網站免廣告哦
閱讀電子書的方法如下:
開啟CSDN APP(軟體商城搜尋“CSDN”即可找到哦)—>登入CSDN賬號—>學習—>電子書
相關文章
- 如何編寫一個Perl爬蟲程式爬蟲
- 使用nodeJS寫一個簡單的小爬蟲NodeJS爬蟲
- 使用正則編寫簡單的爬蟲爬取某網站的圖片爬蟲網站
- nodeJS做一個簡單的爬蟲NodeJS爬蟲
- 5 個用 Python 編寫 web 爬蟲的方法PythonWeb爬蟲
- 編寫一個使用wreq庫的爬蟲程式爬蟲
- 使用python的scrapy來編寫一個爬蟲Python爬蟲
- 簡單的爬蟲程式爬蟲
- Python爬蟲:手把手教你寫迷你爬蟲架構Python爬蟲架構
- 使用JavaScript編寫的爬蟲程式JavaScript爬蟲
- 分分鐘教你用node.js寫個爬蟲Node.js爬蟲
- python爬蟲:爬蟲的簡單介紹及requests模組的簡單使用Python爬蟲
- 一個簡單的BypassUAC編寫
- 一個簡單的爬蟲 頭部構造爬蟲
- 簡單例子展示爬蟲在不同思想下的寫法單例爬蟲
- 寫個爬蟲唄爬蟲
- 如何自己寫一個網路爬蟲爬蟲
- 教你如何寫一個簡單的折線圖控制元件控制元件
- 我的第一個 scrapy 爬蟲爬蟲
- 一天時間入門python爬蟲,直接寫一個爬蟲案例,分享出來,很簡單Python爬蟲
- 如何用 JavaScript 編寫你的第一個單元測試JavaScript
- 爬蟲入門經典(五) | 簡單一文教你如何爬取高德地圖爬蟲地圖
- 手把手教你寫網路爬蟲(2):迷你爬蟲架構爬蟲架構
- python簡單爬蟲(二)Python爬蟲
- 教你如何寫第一個jsp頁面JS
- java實現一個簡單的爬蟲小程式Java爬蟲
- 超貼心的,手把手教你寫爬蟲爬蟲
- python爬蟲初探--第一個python爬蟲專案Python爬蟲
- 教你寫個簡單的 Redis Client 框架 - .NET CoreRedisclient框架
- 基於nodejs編寫小爬蟲NodeJS爬蟲
- 寫了個簡單爬蟲,分析 Boss 直聘自動駕駛崗位爬蟲自動駕駛
- 使用 Typhoeus 和 Ruby 編寫的爬蟲程式爬蟲
- 初探python之做一個簡單小爬蟲Python爬蟲
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 編寫一個簡單的智慧合約
- 編寫一個簡單的babel外掛Babel
- 簡單瞭解python爬蟲Python爬蟲
- Python代理IP爬蟲的簡單使用Python爬蟲