python爬虫,爬取猫眼电影2(xpath和bs4)
接著上面的。
使用xpath提取信息,雖然python很多庫,比如beautifulsoup,也有很多功能,比如查找節點,添加刪除節點。但是個人感覺對爬蟲來說,最重要的還是提取信息,當然,順利的提取信息的前提是你得掌握好這些庫的用法,不過有些功能確實一輩子也不會用到。對爬蟲來說,就是提取文本,獲取屬性,這兩個。
還是打開頁面,這里我直接讀入本地的文件,知識為了簡單起見。不在requests了。
我們自己做網頁爬蟲的時候,還是需要借助一些工具的。比如xpath。我經常用的就是 瀏覽器的xpath helper插件??梢院芊奖愕目吹絰path的路徑是否匹配到文本。
from lxml import etreee = etree.HTML(html) e.xpath("//title//text()")具體到提取信息,還是需要借助瀏覽器插件。
?這樣,就可以看到是不是能提取到信息,如果不能,那就就是xpath有問題了??梢栽俑?#xff0c;
當然也可以在element,元素上直接點擊右鍵,copy xpath,但是這只是有助于我們分析,往往只能提取個別的,不能用到一個網頁里面所有的電影。
?拷貝出來的xpath是這樣的。
?結果它只能匹配《我不是藥神》這一個電影名字。往往自己寫,加上拷貝,一起分析。簡單的xpath,直接就可以寫出來,比如這個例子。復雜的可以借助拷貝,再分析。
演員的信息可以這樣。
e = etree.HTML(html) dd = e.xpath('//div[@class="main"]//dd') print(len(dd)) for d in dd:index = d.xpath('.//i/text()')[0]img = d.xpath('.//a/img[2]/@data-src')[0]title = d.xpath('.//p[contains(@class,"name")]//text()')[0]actor = d.xpath('.//p[contains(@class,"star")]//text()')[0].strip()releasetime = d.xpath('.//p[contains(@class,"releasetime")]//text()')[0]score = d.xpath('.//p[contains(@class,"score")]//text()')score = "".join(score)print(index, img, title, actor, releasetime, score)?這里我還是先把dd元素抓出來,然后再遍歷。
dd元素里面的每一個元素也是xpath對象,還是繼續用xpath提取信息。
為了省事,直接用的 contains方法, 其實也可以直接寫 成?
//dd//p[@class="star"]//text()
這樣的形式,但是我怕有的class里面的內容不止是一個單詞,為了省事,還是用了contains安全一些。
得到結果。
?接下來用bs4
首先還是把html轉成bs4對象。
from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml') # print(soup) items = soup.find_all('dd') # print(len(dd)) for item in items:index = item.i.stringtitle = item.find(class_='name').string,img = item.find(class_='board-img')['data-src'],star = item.find(class_='star').string.strip()[3:],time = item.find(class_='releasetime').string.strip()[5:],score = item.find(class_='integer').string.strip() + item.find(class_='fraction').string.strip()print(index, img, title, actor, releasetime, score)?然后是css
同樣,還是讀入為css對象,只不過bs4里面就可以直接用css。
比如:
soup.select('dd:nth-child(1) .star') soup.select('dd i.board-index')[0]dd = soup.select('dd') ddfor d in dd:print(d.select('.star'))soup.select("dd p.star")[0].get_text() soup.select("dd i.board-index")[0].get_text()soup.select("dd .score i")[0].string soup.select("dd:nth-child(1) .integer")[0].string先把dd解析為soup對象,然后,用select方法,就可以了。
bs4提取信息的函數是get_text(),
或者string,兩者結果是一樣的。
css選擇器,需要借助瀏覽器的chropath插件,
比如
我平時喜歡用scrapy的selector方法,里面支持xpath 和css,所以還是挺方便的,反正都要裝scrapy。所以一個解決所有問題。
總結
以上是生活随笔為你收集整理的python爬虫,爬取猫眼电影2(xpath和bs4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫,爬取猫眼电影1(正则表
- 下一篇: 请求时的编码问题 Use body.en