【问题标题】:ValueError: No tables found matching pattern '.+' from two websites [duplicate]ValueError:没有从两个网站找到匹配模式“.+”的表[重复]
【发布时间】:2021-08-29 00:47:32
【问题描述】:

首先我想说我正在运行 Python 3.8

我收到了这个 ValueError: No tables found matching pattern '.+' from two different sites,而不仅仅是 'https://www.worldometers.info/coronavirus/'

这是我的第一个代码:

import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup
from IPython.display import display, HTML
from datetime import date

today = date.today()
caption = 'Coronavirus Data {}'.format(today)

#HTML To DataFrame

url = 'https://www.worldometers.info/coronavirus/'
r = requests.get(url)
html_doc = r.text
soup = BeautifulSoup(html_doc)
yesterday = soup.find('div', attrs={'id':'nav-yesterday'})
dfs = pd.read_html(yesterday.prettify(), flavor = 'bs4')[0]
print(dfs)

第二个:

import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup
from IPython.display import display, HTML

url = 'https://www.stadiumsofprofootball.com/comparisons/'
r = requests.get(url)
text = r.text
soup = BeautifulSoup(text)
table = soup.find_all('table')[0]
df = pd.read_html(soup.prettify())

我已经通过 .find_all('table') 验证了我要抓取的两个表实际上都包含在“table /table”中,所以我不确定问题是什么。

我只是在此创建一个单独的主题,因为我知道 worldometers 冠状病毒网站有主题,但这些解决方案都不适合我,而且我也在另一个网站上看到它。

我不确定是 BeautifulSoup 错误还是发生了什么。

【问题讨论】:

  • 请使用回溯发布整个错误以及错误发生在哪一行

标签: python pandas beautifulsoup


【解决方案1】:

这样做应该可以解决您的问题。

re.sub(r'<.*?>', lambda g: g.group(0).upper(), <variable to change>)

这是完整的代码:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import re

r = requests.get('https://www.worldometers.info/coronavirus/').text

soup = BeautifulSoup(r,"lxml")
yesterday = str(soup.find('div', attrs={'id':'nav-yesterday'}))
# Converted into string because re need string not bytes

yesterday = re.sub(r'<.*?>', lambda g: g.group(0).upper(), yesterday)
# Changing characters inside <> into uppercase

dfs = pd.read_html(yesterday)[0]
print(dfs)

另一个也一样:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import re

r = requests.get("https://www.stadiumsofprofootball.com/comparisons/").text
soup = BeautifulSoup(r,"lxml")
table = str(soup.find('table'))
# You don't have to use find_all if you want to select first element only

table = re.sub(r'<.*?>', lambda g: g.group(0).upper(), table)

df = pd.read_html(table)
print(df)

欲了解更多信息,请访问here

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多