如何使用BeauitfulSoup从多个网页中抓取数据?

时间:2017-07-11 07:48:55

标签: python python-2.7 web-scraping beautifulsoup

我遇到以下代码的问题,对不起,我是新手,我想将FullPage列表中的字符串添加到实际的URL中,然后我想访问它们并从中抓取一些数据页面。到目前为止,它一直很好,但我不知道如何访问列表中的其他链接。

输出只会给我一页的数据,但我需要30页的数据,如何让这个程序遍历每个链接?

网址有一个模式,第一部分有“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' '))

2 个答案:

答案 0 :(得分: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行移动到循环中就可以了。

答案 1 :(得分: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,如果它意味着不变的话。