2017-06-28 17 views
0

私はPython Beautiful Soupにはかなり新しいので、htmlやjsに関する知識はあまりありません。私はこのpageですべてのxlsファイルをダウンロードするためにbs4を使用しようとしましたが、bs4が「添付ファイル」セクションの下にあるリンクを見つけることができないようです。誰かが私を助けてくれますか?ダウンロードに必要なリンクが見つかりません(Python BeautifulSoup)

私の現在のコードは次のとおりです。

""" 
Scrapping of all county-level raw data from 
http://www.countyhealthrankings.org for all years. Data stored in RawData 
folder. 
Code modified from https://null-byte.wonderhowto.com/how-to/download-all- 
pdfs-webpage-with-python-script-0163031/ 
""" 

from bs4 import BeautifulSoup 
import urlparse 
import urllib2 
import os 
import sys 

""" 
Get all links 
""" 
def getAllLinks(url): 
    page=urllib2.urlopen(url) 
    soup = BeautifulSoup(page.read(),"html.parser") 
    links = soup.find_all('a', href=True) 
    return links 

def download(links): 
    for link in links: 
     #raw_input("Press Enter to continue...") 
     #print link 
     #print "------------------------------------" 
     #print os.path.splitext(os.path.basename(link['href'])) 
     #print "------------------------------------" 
     #print os.path.splitext(os.path.basename(link['href']))[1] 
     suffix = os.path.splitext(os.path.basename(link['href']))[1] 
     if os.path.splitext(os.path.basename(link['href']))[1] == '.xls': 
      print link #cannot find anything 
      currentLink = urllib2.urlopen(link) 

links = 
getAllLinks("http://www.countyhealthrankings.org/app/iowa/2017/downloads") 
download(links) 

(ちなみに、私の希望のリンクはthisのように見えます。)

ありがとう!

答えて

0

これは、BeautifulSoup(それ自体は少なくとも)が不十分なタスクの1つと考えられます。しかし、それはセレンで行うことができます。

>>> from selenium import webdriver 
>>> driver = webdriver.Chrome() 
>>> driver.get('http://www.countyhealthrankings.org/app/iowa/2017/downloads') 
>>> links = driver.find_elements_by_xpath('.//span[@class="file"]/a') 
>>> len(links) 
30 
>>> for link in links: 
...  link.get_attribute('href') 
...  
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/CHR2017_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2017%20County%20Health%20Rankings%20Iowa%20Data%20-%20v1.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2017%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2017%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/CHR2016_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2016%20County%20Health%20Rankings%20Iowa%20Data%20-%20v3.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2016%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2016%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/CHR2015_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2015%20County%20Health%20Rankings%20Iowa%20Data%20-%20v3.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2015%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2015%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/CHR2014_IA_v2.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2014%20County%20Health%20Rankings%20Iowa%20Data%20-%20v6.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2014%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2014%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/states/CHR2013_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2013%20County%20Health%20Ranking%20Iowa%20Data%20-%20v1_0.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2013%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2013%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/states/CHR2012_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2012%20County%20Health%20Ranking%20Iowa%20Data%20-%20v2.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2012%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2012%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/states/CHR2011_IA.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2011%20County%20Health%20Ranking%20Iowa%20Data%20-%20v2.xls' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2011%20Health%20Outcomes%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2011%20Health%20Factors%20-%20Iowa.png' 
'http://www.countyhealthrankings.org/sites/default/files/states/CHR2010_IA_0.pdf' 
'http://www.countyhealthrankings.org/sites/default/files/state/downloads/2010%20County%20Health%20Ranking%20Iowa%20Data%20-%20v2.xls' 
+0

ありがとうございます。これはうまくいくようです!ちょうど不思議なことに、BeautifulSoupがこの場合にうまくいかない理由を知っていますか? – jliu

+0

これは私の答えにあったはずです。あなたのコードは大丈夫だったので、私は疑いがありました。私はBeautifulSoupを使って、ページ上のすべてのリンクを見つけ、それらのHFSを印刷しようとしました。これらのどれも私たちが望むものではありませんでした。私には、Ajaxを使ってコンテンツを読み込む可能性が高いと示唆していました。これは、今日では事実上の規範です。 BeautifulSoupを使用することはできますが、しばしばセレンのような製品の機能を備えたページのDOMをロードする必要があります。 BeautifulSoupはHTMLに読み込まれていないものは処理できません。 –

+0

ええ。ありがとう:)) – jliu

関連する問題