【问题标题】:How to properly scrape data from a javascript website in Python?如何在 Python 中正确地从 javascript 网站上抓取数据?
【发布时间】:2021-02-28 16:47:21
【问题描述】:

我是 python 编程的新手,我想练习网页抓取。我最初的目标是根据分数列出一些国家/地区的前 10 名球员。但似乎,我无法获得页面的全部源代码,因此我无法创建我的数据库。因此,当我在 Chrome 中单击“inspect\elements”时,我能够看到必要的数据,但是使用下面的代码,我无法获得所有数据。

from selenium import webdriver
url = 'https://aoe2.net/#aoe2de-leaderboard-rm-1v1'
driver = webdriver.Chrome()
code = driver.get(url)
source = driver.page_source
print(source)

你能告诉我,我做错了什么吗?

【问题讨论】:

    标签: python selenium dom web-scraping webdriver


    【解决方案1】:

    试用了这段代码,应该可以工作:

    from selenium import webdriver
    from time import sleep
    driver = webdriver.Firefox()
    code = driver.get('https://aoe2.net/#aoe2de-leaderboard-rm-1v1')
    sleep(5) #Since my internet is slow, if yours is fast enough then you can comment this line
    d1 = {}
    for i in range(1,11):
        if i % 2 == 1:
            val = 'odd'
        else:
            val = 'even'
        a = driver.find_element_by_css_selector(f'tr.{val}:nth-child({i}) > td:nth-child(3) > a:nth-child(3)').text
        d1[i] = a
    print(d1)
    

    只需用 chrome 替换 firefox,因为我没有安装 Chrome 驱动程序

    【讨论】:

    • 谢谢!这真的有效。但是我很难理解这部分代码: "> td:nth-child(3) > a:nth-child(3)" ">" 和 (3) 究竟代表什么?能给我解释一下吗?!
    • 嘿,这就是 CSS 选择器脚本,对名称进行检查元素,并复制名称列的 CSS 选择器代码。 tr.{val}:nth-child({i}) > td:nth-child(3) > a:nth-child(3) can be split up into parts: tr - 表格行 (html) val 表示奇数和偶数,这是 CSS 选择器中的重复模式(奇数表示奇数,反之亦然) nthchild{i} - 表示实际排名数(1,2 ,3,4) 根据我的理解, td:nth-child(3) 是单元格内数据的位置。由于包含名称的单元格也有空格以及超链接和...
    • 头像信息,我们只取了选择性数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多