第11課、真實世界中的網頁解析
阿新 • • 發佈:2018-11-04
目標:爬取真實世界中的網頁資訊
熟悉:
Request庫:
是Python中的一個HTTP網路請求庫,用來簡化網路請求!能夠讓你的Python程式向伺服器傳送HTTP請求,獲得網頁資料的庫。
time庫:
與時間相關的庫,因為在向網站伺服器請求的時候,如果你的request請求太過頻繁的時候,伺服器可能會封掉你的IP。所以應該設定請求間隔時間,與真人訪問網站的請求一致。
思路:
1. 熟悉伺服器與本地的交換機制
2. 解析真實網頁獲取資料的方法
客戶端(使用者)如果想瀏覽網頁首先是向目標URL傳送request請求,然後伺服器在收到請求之後,返回一個response迴應,如Response [200]表示收到,404表示伺服器無法迴應。如果返回的是200,則載入請求網頁的資訊。然後在通過BeautifulSoup解析網頁,獲取想要的元素資訊。
程式碼
1 from bs4 import BeautifulSoup 2 import requests 3 import time 4 # request是Python中的一個HTTP請求庫 5 # time庫與時間相關的庫 6 7 url = 'https://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html' 8 urls = ['https://www.tripadvisor.cn/Attractions-g60763-Activities-oa{}-New_York_City_New_York.html'.format(str(i)) for i in range(30,1230,30)] 9 headers = { 10 'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' 11 } 12 # headers是在向伺服器傳送請求的時候,提交的一個User-Agent,此處請求的是手機的網頁型別,然後伺服器接受請求返回手機的網頁型別,因為此網頁的手機版比電腦版更易爬取資料。13 14 def get_wb_data(url,data=None): #設定一個引數,初始化data字典為None,防止在迴圈該函式的時候,前一個字典對後一個字典的影響,所以每次迴圈都是初始化data 15 # 向目標網站url請求,獲取網頁資訊,解析網頁 16 wb_data = requests.get(url,headers = headers) #向目標伺服器URL傳送一個request請求 17 soup = BeautifulSoup(wb_data.text,'lxml') 18 time.sleep(4) 19 # print(soup) 20 # 定位要獲取資訊的元素 21 titles = soup.select('li[class="listing whiteList divider"] > a > div.container.containerLLR > div.title.titleLLR > div') 22 imgs = soup.select('li > a > div.thumb.thumbLLR.soThumb > div') 23 # print(imgs) 24 for title,img in zip(titles,imgs): 25 data = { 26 'title':title.get_text(), 27 'img':img.get('data-thumburl') 28 } 29 print(data) 30 31 print("【第1頁】:") 32 get_wb_data(url) 33 j = 2 34 for single_url in urls: 35 print("【第{}頁】:".format(str(j))) 36 j = j + 1 37 get_wb_data(single_url)
問題:
爬取線上網頁和本地網頁基本上是差不多的,只是線上網頁對元素的定位會比較難,需要測試,並且好多網站都會採取了一定的反爬蟲措施。線上網站需要先發request請求,才可以獲得需要爬取的網頁。
當爬取電腦端網頁比較難的時候,可以換成其他型別的網頁,比如手機端或者pad端的網頁。
學習過程中碰到問題還是不少的,主要原因還是對python基本知識不瞭解導致,所以再學習的過程中又順便想學習了《笨辦法學python》目前已到習題39,類的學習,目前爬蟲學習中還沒用到,等用到的時候再去學。