将pandas.series.apply()用于webcrawler是否足够?

时间:2018-02-13 00:06:19

标签: python pandas web-crawler apply

我将https://www.usgbc.org/projects/list?page=17&keys=Mexico中的数据集导入python-Pandas

此数据集包含具有LEED认证的建筑物(提供的链接专门过滤来自墨西哥的建筑物)

每一行都包含一个网址,其中包含每个建筑的详细信息。我有兴趣浏览每个建筑物的网址以获取邮政编码。

我已经有了一个webcrawler来从每个页面获取数据:

def webcrawler(x):
    url = x
    try:
        page = requests.get('https://www.usgbc.org/projects/reforma-180')
        tree = html.fromstring(page.content)
    except:           # Regresa false si no logras entrar a la URL
        street = False
        locality = False
        postalcode = False
        country = False
        return

    # get data from tree. Return None if nothing is found 
    try:
        street = ''.join(tree.xpath('//span[@itemprop="streetAddress"]/text()'))
    except:
        street = None
    try:
        locality = tree.xpath('//span[@itemprop="addressLocality"]/text()')
    except:
        locality = None
    try:
        postalcode = tree.xpath('//span[@itemprop="postalCode"]/text()')
    except:
        postalcode = None
    try:
        country = tree.xpath('//span[@itemprop="addressCountry"]/text()')
    except:
        country = None

    return [street, locality, postalcode, country]

# Try it yourself
x = 'https://www.usgbc.org/projects/reforma-180'
y = webcrawler(x)

了解导入的数据集包含一个名为" Path"的列。包含每个建筑物页面的链接,并且数据集长度为2390行,我的问题是:

使用df.Path.apply(webcrawler)是否足够?

df.Path.apply(webcrawler)

我担心这会在很短的时间内向服务器发送大量请求,这可能是不道德的,也可能被解释为对服务器的攻击。<​​/ p>

我可以就此发表意见吗?

1 个答案:

答案 0 :(得分:-1)

在您的导入中加入from time import sleep并添加sleep(0.5)左右,以便在请求之间休眠半秒钟。