2017-02-23 51 views
0

編程仍然很新穎,更具體地說是Python。我一直在爲Kickstarter頁面開發webscraper。我已經從一個頁面上的每個項目中獲得所有信息,但我一直在做的方式相對混亂。我想讓這個抓取工具抓住第一個項目,抓取數據,追加,然後轉到下一個項目,但是它設置爲抓取頁面中的所有目標數據,並希望它們全部與正確的項目在最後。組織我的BeautifulSoup4網頁抓取

(鏈接的人好奇:https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

現在,我已經從每一個不僅僅是Blurb的,並鏈接到每個搶奪更多的數據,但下面是我一直在做一些示例代碼。 BeautifulSoup有點令人困惑,因爲我相信它會將事物轉換成不同的數據類型,對於我未經訓練的人來說,使得將.find_next()類型的東西串起來變得更加困難。特別是Kickstarter擁有這些項目,每行4個項目。

關於我如何實現的任何想法:找到第一個項目 - > scrape - >追加數組 - >在下一個項目上重複?

pageGrab = BeautifulSoup(requests.get(url).content, "html.parser") 

link_array = [] 
blurb_array = [] 

links = pageGrab.select('.project-title a') 
blurb = pageGrab.select('.project-blurb') 

for link in links: 
    rel_path = link.get('href') 
    path = urljoin(base_url, rel_path) 
    link_array.append(path) 

for row in blurb: 
    blurb_array.append(row.string.strip()) 

在這裏,我一直在通過這些陣列成熊貓數據幀其寫入到一個Excel文件。儘管這是一項繁瑣的工作,但我對自己感到非常自豪,但這是我第一個有用的程序/腳本!

回答

2

我建議您選擇的每個項目的「卡」,其中有類「項目」:

pageGrab.select('.project') 

的選擇方法也返回了「湯」,這又可以被搜索到。例如,要查找一個項目的標題:

<project soup>.select_one('.project-title > a').contents[0] 

它選擇包含在頭部與project-title類的鏈接元素, 內容屬性獲取的實際文本(在列表中,因爲某些原因)。有關這些方法的更多信息,請參閱the docs

舉個例子,得到的第一個項目的名稱,你可以做

pageGrab.select('.project')[0].select_one('.project-title > a').contents[0] 

所以,你可以在所有項目「卡」循環和,但是你想收集的信息。

我不確定你是否在爲了學習一般的網頁抓取而這樣做,但如果你想要製作一個合適的應用程序,我推薦使用JSON數據,這樣操作起來更容易。 您可以只需添加.json頁面URL的末尾,從Kickstarter上的頁面獲取:

https://www.kickstarter.com/discover/advanced.json?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

請記住,他們可能會在將來刪除此,並沒有太多的網站以這樣的方式提供了一個API因爲這個