我們準備使用python的requests和lxml庫,直接安裝完之後開始操作
目标爬取肖申克救贖資訊->傳送門
導入庫
import requests
from lxml import etree
給對外連結接
url=‘https://movie.douban.com/subject/1292052/?tag=%E7%BB%8F%E5%85%B8&from=gaia_video’
擷取網頁html前端代碼一行搞定,在requests中已經封裝好了
data = requests.get(url).text
lxml庫中封裝了解析下載下傳頁面資料的函數
s = etree.HTML(data)
然後我們到豆瓣中擷取需要爬取資料的xpath
右鍵->copy->xpath我們就拿到了這樣的一串資料
//*[@id="content"]/h1/span[1]
然後我們擷取資料内容
film = s.xpath('//*[@id="content"]/h1/span[1]/text()')
注意最後面的/text()是擷取文本類型的資料不然會出錯
最後直接print(film)即可
完整代碼如下
import requests
from lxml import etree
url = 'https://movie.douban.com/subject/1292052/?tag=%E7%BB%8F%E5%85%B8&from=gaia_video' # 定義url
data = requests.get(url).text # 擷取全部html
s = etree.HTML(data)
film = s.xpath('//*[@id="content"]/h1/span[1]/text()')
print(film)
進階
接下來我們想爬取主演
在演員上右鍵copy -> copy xpath
我們會有這樣一串xpath
//*[@id="info"]/span[3]/span[2]/span[1]/a
//*[@id="info"]/span[3]/span[2]/span[2]/a
//*[@id="info"]/span[3]/span[2]/span[3]/a
……
我們發現這一組xpath似乎是封裝在一個大的span标簽數組之中,是以我們直接取拿span[2]裡面的a/text()
actor = s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')
我們獲得了以下的運作結果,直接可以擷取清單中的全部标簽(删去最後的span數組和a标簽)之後我們可以直接拿到目前頁面的所有的電影名稱。
這裡需要注意,因為目前我們聯系的豆瓣網頁中所有的電影的标簽都是封裝在
- 标簽之中的是以他們的@title内容可以通過直接通路父數組得到
- 看代碼
運作結果 這個代碼可以直接拿過去用,自己可以運作試一試。import requests from lxml import etree url = 'https://movie.douban.com/top250' # 定義url data = requests.get(url).text # 擷取全部html s = etree.HTML(data) film = s.xpath('//*[@id="content"]/div/div[1]/ol/li') # 拿到所有的li标簽 for div in film: film_name = div.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] # [0]的u作用 因為擷取到的事list清單是以用這個來擷取str film_score= div.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] film_msg = div.xpath('./div/div[2]/div[2]/p[2]/span/text()')[0] print('{} {} {}'.format(film_name,film_score,film_msg)) # 格式化輸出
爬取所有的top250電影資訊
過幾天再寫。。。。