2016-11-21 10 views
0

余分な学校のプロジェクトのために、私はどのようにウェブサイトを擦るかを学んでいます。以下のコードでわかるように、私は、あるページから 'elqFormRow'というフォームを掻き集めることができます。ウェブサイト特定のフォームを掻き集める

website全体で 'elqFormRow'のすべての出現を取り払う方法を教えてください。そのフォームがどこにあったかのURLをリストに戻したいのですが、どうやって笑っているのか分からないので、問題が発生しています。

import bs4 as bs 
import urllib.request 

sauce = urllib.request.urlopen('http://engage.hpe.com/Template_NGN_Convert_EG-SW_Combined_TEALIUM-RegPage').read() 

soup = bs.BeautifulSoup(sauce, 'lxml') 

for div in soup.find_all('div', class_='elqFormRow'): 
    print(div.text.strip()) 
+0

あなたの質問を正しく読むと、あなたが望むように思えます。スパイダーは複雑になる可能性がありますが、一般的に言えば、ページ上の他のリンクのリンクを検索すると、そのページのURLに従いたいものを取得し、深度/要件を繰り返します。 'urllib.request'からurlを取得したい場合は、' .geturl() 'を使うことができますが、' .read'を使っているので変数にすることはできません。 – Pythonista

答えて

0

ページからURLを取得し、それをフォローして(おそらく)サイト全体をスクラップすることができます。起動すると何ページあなたが望む場所に応じて少しマッサージが必要になりますこのような何か、:

import bs4 as bs 
import requests 

domain = "engage.hpe.com" 
initial_url = 'http://engage.hpe.com/Template_NGN_Convert_EG-SW_Combined_TEALIUM-RegPage' 

# get urls to scrape 
text = requests.get(initial_url).text 
initial_soup = bs.BeautifulSoup(text, 'lxml') 
tags = initial_soup.findAll('a', href=True) 

urls = [] 
for tag in tags: 
    if domain in tag: 
     urls.append(tag['href']) 
urls.append(initial_url) 

print(urls) 

# function to grab your info 
def scrape_desired_info(url): 
    out = [] 
    text = requests.get(url).text 
    soup = bs.BeautifulSoup(text, 'lxml') 
    for div in soup.find_all('div', class_='elqFormRow'): 
     out.append(div.text.strip()) 
     return out 



info = [scrape_desired_info(url) for url in urls if domain in url] 

urllibは、要求を使用し、悪臭を放ちます。サイト内で複数のレベルを下げる必要がある場合は、関数内にURLの検索セクションを置き、それをX回呼び出す必要があります。ここで、Xはトラバースするリンクのレベルの数です。

責任を持ってこすります。ループの中でサイトに何度も何度も挑戦しているソーサラーの見習いの状況や、サイト外のリンクをたどることは避けてください。一般的に、私はまたあなたが掻きたいと思うページを質問に入れません。

+0

この興味深い洞察に感謝します。万が一、トレースバックエラーが出ますか?私は__init__ elif lenの 'File" C:¥Users¥Jeremy¥AppData¥Local¥Programs¥Python¥Python35-32¥lib¥site-packages¥bs4¥__ init__.py "192行目を取得しています(マークアップ)<= 256、(TypeError:タイプ 'レスポンス'のオブジェクトにlen()がありません – faceless

+0

レスポンスオブジェクトをresponse.get()で文字列に変換しませんでした。最初のページ(initial_url)からのリンクを取得するだけなので、次のページでget urlコードを実行してより多くのレベルを取得する必要があることを覚えておいてください。 –

関連する問題