2017-07-11 18 views
0

私は次のコードに問題があります。申し訳ありませんが、私はこれを初めて使っています。実際のURLにFullPageリストの文字列を追加して、それらを訪問してページからデータを抜きたい。これまでのところ、それは良いですが、私はそれがリストの他のリンクを訪問する方法を知らない。BeauitfulSoupで複数のWebページからデータをスクラップするにはどうすればよいですか?

出力では1ページ分のデータしか得られませんが、30ページ分のデータが必要です。このプログラムを各リンクに渡すにはどうすればよいですか?

URLにはパターンがあり、最初の部分には 'http://arduinopak.com/Prd.aspx?Cat_Name='が含まれ、2番目の部分には商品カテゴリ名が含まれています。

import urllib2 
from bs4 import BeautifulSoup 

FullPage = ['New-Arrivals-2017-6', 'Big-Sales-click-here', 'Arduino-Development-boards', 
      'Robotics-and-Copters'] 


urlp1 = "http://www.arduinopak.com/Prd.aspx?Cat_Name=" 
URL = urlp1 + FullPage[0] 

for n in FullPage: 
    URL = urlp1 + n 
    page = urllib2.urlopen(URL) 
    bsObj = BeautifulSoup(page, "html.parser") 


descList = bsObj.findAll('div', attrs={"class": "panel-default"}) 
for desc in descList: 
    print(desc.getText(separator=u' ')) 

答えて

1
import urllib2 
from bs4 import BeautifulSoup 

FullPage = ['New-Arrivals-2017-6', 'Big-Sales-click-here', 'Arduino-Development-boards', 
      'Robotics-and-Copters'] 

urlp1 = "http://www.arduinopak.com/Prd.aspx?Cat_Name=" 
URL = urlp1 + FullPage[0] 

for n in FullPage: 
    URL = urlp1 + n 
    page = urllib2.urlopen(URL) 
    bsObj = BeautifulSoup(page, "html.parser") 

    descList = bsObtTj.findAll('div', attrs={"class": "panel-default"}) 
    for desc in descList: 
     print(desc.geext(separator=u' ')) 

あなたは、各リンクをスケープしたい場合は、ループにあなたのコードの最後の3行を移動すると、それを行います。

+0

これはすべてでしたか?ああ、私は初心者です。どうもありがとう! –

+0

私はそれが役に立つとうれしいです。ちょうど答えを受け入れる –

0

現在のコードはすべてのリンクをフェッチしますが、オブジェクト参照は1つだけ格納します。BeautifulSoup代わりに、それらを配列内にすべて格納するか、別のURLを訪問する前にそれらを処理することができます(下記参照)。

for n in FullPage: 
    URL = urlp1 + n 
    page = urllib2.urlopen(URL) 
    bsObj = BeautifulSoup(page, "html.parser") 

    descList = bsObj.findAll('div', attrs={"class": "panel-default"}) 
    for desc in descList: 
     print(desc.getText(separator=u' ')) 

また、PascalCaseを使用する名前は、慣習的にクラス用に予約されています。 FullPageは、定数である場合は通常fullPageまたはFULL_PAGEと書かれます。

関連する問題