关于抓取JavaScript重量级网站的建议

时间:2017-08-23 07:43:35

标签: javascript python selenium-webdriver web-scraping

我想用跑步者制作一个数据库'来自2016年纽约马拉松赛的信息(http://results.nyrr.org/event/M2016/finishers)。这是一个javascript密集的网站,需要点击每个"展开结果"为每个跑步者加载他们的信息。如您所见,有超过50,000名跑步者,所以这项任务并不容易。

我一直在尝试使用Python-selenium来做到这一点。首先,我点击了"显示更多"直到我得到所有参赛者的名单。然后,我点击每个跑步者' "展开结果"按钮,最后使用BeautifulSoup获取我想要的信息。这种方法的问题在于它非常慢并且出错,因为有时候没有按钮可以点击。

我想问一下有哪些方法可以做到这一点。有没有更好的方法来建立这个数据库?任何关于更好的方法或如何改进我的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码。您还可以使用线程来提高性能。

import json

import requests

API_URL = 'http://results.nyrr.org/api/runners/finishers'
PAGE_SIZE = 51


def get_page(index):
    request = requests.post(API_URL, {
        'ageGroup': None,
        'city': None,
        'eventCode': "M2016",
        'gender': None,
        'handicap': None,
        'pageIndex': index,
        'pageSize': PAGE_SIZE,
        'runnerId': None,
        'searchString': None,
        'sortColumn': "overallTime",
        'sortDescending': False
    })
    data = json.loads(request.text).get('response', {})
    items = data.get('items', [])
    store(items)
    return len(items) > 0


def store(items):
    """Store items into database"""
    # Write your code to store the given items
    print(items)


page = 1
while get_page(page):
    page += 1