2017-07-11 95 views
0

我有一個問題,下面的代碼,我很抱歉,我是新來的這一切,我想將全頁列表中的字符串添加到實際的URL,然後我想訪問它們並從頁面中刮取一些數據。到目前爲止,它一直很好,但我不知道如何讓它訪問列表中的其他鏈接。如何使用BeauitfulSoup從多個網頁上抓取數據?

輸出只會給我一頁的數據,但我需要30頁的數據,我該如何讓這個程序遍歷每個鏈接?

該URL有一個模式,第一部分'http://arduinopak.com/Prd.aspx?Cat_Name=',然後第二部分有產品類別名稱。

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

您當前的代碼獲取所有鏈接,但它僅存儲一個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編寫爲fullPageFULL_PAGE