2016-09-16 109 views
1

所以,我是python的新手,並且正在嘗試開發一個練習,在該練習中,我從該網址的列表中刮取頁碼,該列表是各種已發表論文的列表。Python網絡抓取解決方案

當我進入了我想刮的頁面的HTML元素,我檢查元素,找到這個HTML代碼來匹配:

<div class="src"> 
     Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63 
    </div> 

,我想生產出什麼是在部分在類括號之間。 這是我爲了完成這項工作而想寫的東西。

import requests 
from bs4 import BeautifulSoup 

url = "http://www.jstor.org/action/doAdvancedSearch?c4=AND&c5=AND&q2=&pt=&q1=nuclear&f3=all&f1=all&c3=AND&c6=AND&q6=&f4=all&q4=&f0=all&c2=AND&q3=&acc=off&c1=AND&isbn=&q0=china+&f6=all&la=&f2=all&ed=2001&q5=&f5=all&group=none&sd=2000" 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
links = soup.find_all("div class='src'") 
for link in links: 
    print 

我知道這段代碼是未完成的,那是因爲我不知道該從哪裏去:/。有人能幫我一下嗎?

+0

您想要標籤文本?喜歡:「外交事務,第79卷,第4期(2000年7月 - 8月),第53-63頁」? –

+0

提示:[檢查網站條款](http://about.jstor.org/terms)**內容的禁止使用**(d)進行任何活動,例如使用自動下載或導出的計算機程序內容通常被稱爲網絡機器人,蜘蛛,爬蟲,流浪者或加速器,可能會干擾,破壞或以其他方式加重JSTOR服務器的負擔 –

+0

您是否確實嘗試閱讀文檔? https://www.crummy.com/software/BeautifulSoup/bs4/doc/ –

回答

1

如果我理解正確的話,你要帶class =「SRC」的所有div

內頁。如果是這樣,那麼你需要做的:

import requests 
import re 
from bs4 import BeautifulSoup 

url = "http://www.jstor.org/action/doAdvancedSearch?c4=AND&c5=AND&q2=&pt=&q1=nuclear&f3=all&f1=all&c3=AND&c6=AND&q6=&f4=all&q4=&f0=all&c2=AND&q3=&acc=off&c1=AND&isbn=&q0=china+&f6=all&la=&f2=all&ed=2001&q5=&f5=all&group=none&sd=2000" 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
links = soup.find_all('div', {'class':'src'}) 
for link in links: 
    pages = re.search('(pp.\s*\d*-\d*)', link.text) 
    print pages.group(1) 

請注意,我用正則表達式來獲取頁碼。這可能聽起來很奇怪的人不熟悉正則表達式,但我認爲它更優雅比使用像stripsplit

+0

哦,這是完美的。非常感謝你! – Kainesplain

+0

不要忘記標記爲答案=) –

+0

如果我只是想打印一段文本的字符串(比如說「第53-63頁」),我會如何將它寫入代碼? – Kainesplain

2

到故事帕多瓦的answer另一種字符串操作是這樣的:

from bs4 import BeautifulSoup 

html = """<div class="src"> 
    Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63 
</div> 
<div class="src"> 
    Other Book, Vol. 1, No. 1 (Jul. - Aug., 2000), pp. 1-23 
</div>""" 
soup = BeautifulSoup(html) 
links = soup.find_all("div", class_ = "src") 
for link in links: 
    print link.text.strip() 

此輸出:

Foreign Affairs, Vol. 79, No. 4 (Jul. - Aug., 2000), pp. 53-63 
Other Book, Vol. 1, No. 1 (Jul. - Aug., 2000), pp. 1-23 

本答案使用參數,即recommended在文檔中。


如果你正在尋找讓頁面數,一切都按照以上格式(逗號分隔),您可以更改爲循環搶串的最後一個元素:

print link.text.split(",")[-1].strip() 

此輸出:

pp. 53-63 
pp. 1-23 
+0

'class_'被推薦用於css類,即'div class =「foo bar」'。 –