2017-03-04 5 views
0

これは私がこれまでのリンクを持っているものです:BeautifulSoupのこのスクレーパーをどのようにしてすべてのリンクを通し、成分、栄養情報、および説明書を記録しますか?

from bs4 import BeautifulSoup 
import urllib.request 
import re 



diabetesFile = urllib.request.urlopen("http://www.diabetes.org/mfa-recipes/recipes/recipes-archive.html?referrer=http://www.diabetes.org/mfa-recipes/recipes/") 
diabetesHtml = diabetesFile.read() 
diabetesFile.close() 

soup = BeautifulSoup((diabetesHtml), "html.parser") 
for link in soup.findAll('a', attrs={'href': re.compile("/recipes/20")}): 
    find = re.compile('/recipes/20(.*?)"') 
    searchRecipe = re.search(find, str(link)) 
    recipe = searchRecipe.group(1) 
    print (recipe)  

そして、これが削れますページの1の例である:

import bs4 as bs 
import urllib.request 

sauce = urllib.request.urlopen('http://www.diabetes.org/mfa-recipes/recipes/2017-02-dijon-chicken-and-broccoli-and-noodles.html').read() 
soup = bs.BeautifulSoup(sauce, 'html.parser') 


for div in soup.find_all('div', class_='ingredients'): 
    print(div.text) 
for div in soup.find_all('div', class_='nutritional_info'): 
    print(div.text) 
for div in soup.find_all('div', class_='instructions'): 
    print(div.text) 

私の主な目標はコードの最初のセクションのWebサイトを使用し、すべての680ページからすべてのリンクを取得し、それぞれに入り、コードの2番目のセクションに記載されている情報を収集します。最後に、この情報をテキストファイルに書き込もうとしています。前もって感謝します!

答えて

0

私はあなたのために全体のスクレーパーを書くつもりはありませんが、ここで何ができるかのリストは、次のとおりです。ここで
は、パッケージは、次のとおりです。ページを取得する

from bs4 import BeautifulSoup 
import requests # i use this one instead of urllib 
import re 

コード。

:それは http://thebaseurl/therestOftheLinkで始まる場合

req = requests.Session() 
sauce = req.get('http://www.diabetes.org/mfa-recipes/recipes/2017-02-dijon-chicken-and-broccoli-and-noodles.html').read() 
soup = BeautifulSoup(sauce, 'lxml') 

search_link = re.compile("/recipes/20") # you might need to escape the slashes, i don't remember 

all_links_find = soup.find_all("a", href=search_link) 
all_links_get = [link.get_text(strip=True) for link in all_links_find] 

がHREFによって、あなたはベースURLに値を追加、またはべきではないのいずれか、あなたは他のあなたのような何かを行う必要があり、何もする必要はありません

all_links = [baseurl + link for link in all_links_get] 

は、他のページのためには、前述のdivのためfind方法で上記のロジックを繰り返すことができますが、代わりにget_text(strip=True)を使用して、この時間は、あなたはかなりの

を印刷するため get_text("\n", strip=True)のようなものを使用する必要があります
関連する問題