我們用 requests 庫 + 正規表示式構建乙個簡陋的爬蟲,雖然這個爬蟲很簡陋,但是通過這個例子我們可以對爬蟲有乙個很好的了解。
這次目的是爬取貓眼電影 top 100,要想爬取這些資訊,我們首先要到貓眼電影 top 100 的頁面上觀察一下(也可以說踩點)。**為:
這就是我們要爬取的頁面,現在我們來寫一段**自動訪問這個頁面。
def get_one_pages(url) -> 'html':
headers =
response = requests.get(url, headers=headers)
if response.status_code == 200: # 網頁訪問正常
return response.text
return none
我們構造了get_one_pages(url) 函式,在構造這個函式時要注意一定要加上表頭,表頭的作用是讓爬蟲偽裝成乙個正常的瀏覽器請求。如果不加表頭的話,會被伺服器拒絕訪問(不信你就試一下)。之後當你呼叫這個函式並往裡面傳入 url 也就是 時,該函式會把這個網頁的 html 返回下來。html 算是網頁的源**,在 chrome 瀏覽器中按下 f12 鍵就能看到源**,發現返回的 html 與網頁中的 html 一樣,那麼證明我們這個網頁算是訪問成功了。
以這段標籤為例,我們需要獲取的內容有排名、電影海報、電影名稱、演員和上映時間。這時該輪到正規表示式出場了。我們用正規表示式去匹配這段文字,來獲取想要的資訊,如果你現在還不知道什麼是正規表示式,可以 google 一下,正規表示式的內容很複雜,但這裡我們用到的很簡單,一搜就會。
下面是解析網頁的**:
def parse_one_page(html) -> list:
pattern = re.compile('.*?>(.*?).*?
', re.s)
res = re.findall(pattern, html)
for i in res:
yield
我們用 .*?>(.*?).*?這段正規表示式來匹配想要的內容,然後將匹配的結果存入乙個字典中,為了以後方便讀取和儲存。
下一步我們把爬到的內容儲存下來,否則一旦關閉程式,所有爬取的內容就會消失,白忙一頓豈不是很難受。
def write_to_file(content):
with open('result.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=false) + '\n')
我們用上下文管理器開啟乙個 txt 檔案,將爬下來的內容寫入這個檔案中。
我們的目標是爬取貓眼電影 top 100,可是現在才爬到 top 10,那後面的怎麼辦呢?再來觀察網頁,我們看到,第11-20的url為:?offset=10
第21-30的url為:?offset=20 ,以此類推。。。
那麼我們可以推斷出來網頁的變化只跟offset= 後面數字有關,這樣可以繼續寫**了。
def main(offset):
url = '' + str(offset)
html = get_one_pages(url)
content = parse_one_page(html)
for i in content:
print(i)
write_to_file(i)
這裡寫了乙個 main(offset) 函式,傳入相應的數字,會對相應的網頁進行我們之前的操作。
最後一步,傳入數字即可。總結一下最終的**:
import requests
import re
import json
def get_one_pages(url) -> 'html':
headers =
response = requests.get(url, headers=headers)
if response.status_code == 200: # 網頁訪問正常
return response.text
return none
def parse_one_page(html) -> list:
pattern = re.compile('.*?>(.*?).*?
', re.s)
res = re.findall(pattern, html)
for i in res:
yield
def write_to_file(content):
with open('result.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=false) + '\n')
def main(offset):
url = '' + str(offset)
html = get_one_pages(url)
content = parse_one_page(html)
for i in content:
print(i)
write_to_file(i)
for i in range(10):
main(i*10)
這樣就可以將貓眼電影 top 100 爬取下來,並作為乙個 txt 檔案儲存,我們來看看結果:
很不錯,就是我們期待的結果。
通過這麼乙個簡陋的爬蟲程式,我們對爬蟲已經有了乙個大致的了解,如果想要爬取到更多有用的內容,僅僅這樣還是遠遠不夠的,希望你能在爬蟲路上越爬越遠。
以上內容素材**於崔慶才《python 3網路爬蟲開發實戰》。
爬蟲學習 Requests 正規表示式爬取貓眼電影
p14 requests 正規表示式import requests from requests.exceptions import requestexception def get one page url try headers response requests.get url,headers ...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...