程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 爬蟲學習(一)

編輯:Python

本文將記錄博主學習爬蟲的分享,爬蟲學習需要python3.+ 、 BeautifulSoup、lxml、requests

在python環境下可以通過以下命令進行相關環境的安裝:

pip install BeautifulSoup4
pip install lxml
pip install requests

安裝完成就可以開始學習之路,本文以https://cn.tripadvisor.com/Attraction_Products-g60763-a_sort.-d1687489-The_National_9_11_Memorial_Museum-New_York_City_New_York.html?o=a30#ATTRACTION_LIST網站為例進行簡單的爬蟲學習;

在學習爬蟲之前需要了解一些網站響應的相關知識,自行下去學習(#^.^#),然後還要會用F12,會對浏覽器用F12,什麼,你說按F12什麼都沒發生,那你把鼠標先點擊一下網址在重新F12,什麼,你說按了F12結果屏幕更耀眼了(*.*),那你應該是用筆記本,請按Fn+F12,然後應該,大概,可能......就會出現一下界面:

恭喜,你學會查看當前網頁的頁面元素了(p≧w≦q),好了,至於這些元素是什麼意思請自行下去學習HTML,CSS。

回歸主題,有了以上准備我們就可以開始著手爬蟲了,本文的抓取網址在上面給出,首先我們要明確我們的抓取目標,也就是需要抓取的信息是什麼(明確目標),打開上述網址,本文以抓取網址中的 標題,介紹,價格,游玩時間為例進行講解:

好吧,原諒我懶,標記有點反人類,將就看吧,方正就上要抓取上面標記的信息,那麼首先我們就是要通過F12的見面去定位這些信息都是在那些HTML標簽下,通過檢查頁面元素,確定每個信息的標簽位置如下:

分析發現,四個要素的分布情況如下:標題位於:class為listing_title的<div>標簽下的<a>標簽下;介紹信息位於class為listing_description的<div>標簽下的<span>標簽下;價格位於class為price_test的<div>標簽下的class為from的<div>標簽下的<span>標簽下;游玩時間位於:class為product_duration的<div>標簽下;

好吧讀上去表述好像有點暈乎,主要是我們要搞清信息所處的位置,其實吧,當然也有簡單的方法去標記這些位置[○・`Д´・ ○](有簡單的不早說),方法如下:

selector會復制出當前標簽的路徑結構,可以用於等一下的BeautifulSoup解析。

好了,通過一頓操作,我們終於可以步入正題開始寫我們的爬蟲了(p≧w≦q):

from bs4 import BeautifulSoup
import requests


url = 'https://cn.tripadvisor.com/Attraction_Products-g60763-a_sort.-d1687489-The_National_9_11_Memorial_Museum-New_York_City_New_York.html?o=a30#ATTRACTION_LIST'
#請求網址並接受返回的信息
wb_data = requests.get(url)
#通過.text方法,將網址信息解析成可讀文本,並制定‘lxml’為解析器
soup = BeautifulSoup(wb_data.text,'lxml')
#指定標題信息所處的路徑
titles = soup.select('div.listing_title > a')
#指定介紹信息所處的路徑
introduction = soup.select('div.clickable_listing > div > span')
#指定價格信息所處的路徑
prices = soup.select('div.product_price_info > div.price_test > div > span')
#指定游玩時間信息所處的路徑
duration = soup.select('div.listing_info > div.product_duration')

for title,description,spend,time in zip(titles,introduction,prices,duration):
    #解析信息:.get_text()方法用於獲取當前標簽下的文本內容
    data = {
        'title' :title.get_text(),
        'introduction' : description.get_text(),
        'prices' : spend.get_text(),
        'duration' : time.get_text()
    }
    print(data)

運行結果如下:

 


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved