【问题标题】:Why do data-sort-value return None?为什么数据排序值返回无?
【发布时间】:2021-06-18 01:05:55
【问题描述】:

我正在抓取维基百科的表格,并试图从这个网站获取一些法国城市的人口:https://fr.wikipedia.org/wiki/Liste_des_communes_du_Pas-de-Calais

目前,我不想使用dataframes,我想直接使用标签选择我的项目。但是当我要求程序打印属性“data-sort-value”的值时,它返回一个 None 列表,而在网站的 HTML 代码中,该属性是人口数字。为什么?

这是我的代码

import requests
from bs4 import BeautifulSoup as bs

res=requests.get("https://fr.wikipedia.org/wiki/Liste_des_communes_du_Pas-de-Calais")
soup=bs(res.text,"html.parser")
tableau=soup.find('table','wikitable')
lignes = tableau.findAll("tr")

liste=[]
for ligne in lignes:
    nombre=ligne.find("td", "data-sort-value")
    print(nombre)
    liste.append(nombre)

【问题讨论】:

    标签: python web-scraping beautifulsoup tags wikipedia


    【解决方案1】:

    当您执行nombre = ligne.find("td", "data-sort-value") 时,您正在寻找标签data-sort-value,但它不是标签,而是HTML 属性。如果要搜索具有data-sort-value<td>,可以使用CSS 选择器td[data-sort-value]

    要使用 CSS 选择器,请使用 select_one() 而不是 find()

    ...
    for ligne in lignes:
        nombre = ligne.select_one("td[data-sort-value]")
        if nombre:
            print(nombre.text)
            liste.append(nombre)
    

    【讨论】:

    • 再次非常感谢!我还有一个问题:你知道tableau=soup.find('table','wikitable')tableau=soup.find("table", {"class":"wikitable sortable"}) 之间的区别吗
    • @AnthonySULIO 我不太确定有什么区别。您可以在keyword arguments 下的文档中找到此示例。
    • 好的,谢谢。你知道如何从属性中获取粗略的数据......它的值(数字)因为使用你的代码我得到以下输出<td data-sort-value="1773">1 773 <small>(2018)</small> </td>
    • @AnthonySULIO 试试.text.find("...").text
    • 我试过了,但是没用...我想我不知道如何使用方法文本。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 2021-01-16
    • 2021-04-19
    • 2014-11-22
    • 2022-06-14
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多