Python 多表头<;thead>;在表中<;表>;以及如何从<;thead>;作为一个表行

Python 多表头<;thead>;在表中<;表>;以及如何从<;thead>;作为一个表行,python,web-scraping,Python,Web Scraping,我试图从一个网站上搜集数据,但表中有两组数据,首先,2-3行数据在AD中,其余在tbody中。我可以很容易地一次只从一个数据中提取数据,当我尝试这两种方法时,我得到了一些错误,比如TypeError、AttributeError。顺便说一句,我正在使用python 这是密码 import requests from bs4 import BeautifulSoup import pandas as pd url="https://www.worldometers.info/world-popu

我试图从一个网站上搜集数据,但表中有两组数据,首先,2-3行数据在AD中,其余在tbody中。我可以很容易地一次只从一个数据中提取数据,当我尝试这两种方法时,我得到了一些错误,比如TypeError、AttributeError。顺便说一句,我正在使用python 这是密码

import requests
from bs4 import BeautifulSoup
import pandas as pd

url="https://www.worldometers.info/world-population/"
r=requests.get(url)
print(r)

html=r.text
soup=BeautifulSoup(html,'html.parser')

print(soup.title.text)
print()
print()
live_data=soup.find_all('div',id='maincounter-wrap')
print(live_data)
for i in live_data:
    print(i.text)

table_body=soup.find('thead')
table_rows=table_body.find_all('tr')
table_body_2=soup.find('tbody')
table_rows_2=soup.find_all('tr')
year_july1=[]
population=[]
yearly_change_in_perchantage=[]
yearly_change=[]
median_age=[]
fertillity_rate=[]
density=[]#density (p\km**)
urban_population_in_perchantage=[]
urban_population=[]

for tr in table_rows:


    td=tr.find_all('td')
    year_july1.append(td[0].text)
    population.append(td[1].text)
    yearly_change_in_perchantage.append(td[2].text)
    yearly_change.append(td[3].text)
    median_age.append(td[4].text)
    fertillity_rate.append(td[5].text)
    density.append(td[6].text)
    urban_population_in_perchantage.append(td[7].text)
    urban_population.append(td[8].text)

for tr in table_rows_2:


    td=tr.find_all('td')
    year_july1.append(td[0].text)
    population.append(td[1].text)
    yearly_change_in_perchantage.append(td[2].text)
    yearly_change.append(td[3].text)
    median_age.append(td[4].text)
    fertillity_rate.append(td[5].text)
    density.append(td[6].text)
    urban_population_in_perchantage.append(td[7].text)
    urban_population.append(td[8].text)

headers=['year_july1','population','yearly_change_in_perchantage','yearly_change','median_age','fertillity_rate','density','urban_population_in_perchantage','urban_population']

data_2= pd.DataFrame(list(zip(year_july1,population,yearly_change_in_perchantage,yearly_change,median_age,fertillity_rate,density,urban_population_in_perchantage,urban_population)),columns=headers)
print(data_2)
data_2.to_csv("C:\\Users\\data_2.csv")


您可以尝试下面的代码,它将生成所需的数据。如果您需要任何澄清,请告诉我:-

import requests
import pandas as pd
url = 'https://www.worldometers.info/world-population/'
html = requests.get(url).content
df_list = pd.read_html(html, header=0)
df = df_list[0]
    #print(df)
df.to_csv("data.csv", index=False)
给我下面的输出

print(df)
    Year (July 1)  Population  ... Urban Pop %  Urban Population
0            2020  7794798739  ...      56.2 %        4378993944
1            2019  7713468100  ...      55.7 %        4299438618
2            2018  7631091040  ...      55.3 %        4219817318
3            2017  7547858925  ...      54.9 %        4140188594
4            2016  7464022049  ...      54.4 %        4060652683
5            2015  7379797139  ...      54.0 %        3981497663
6            2010  6956823603  ...      51.7 %        3594868146
7            2005  6541907027  ...      49.2 %        3215905863
8            2000  6143493823  ...      46.7 %        2868307513
9            1995  5744212979  ...      44.8 %        2575505235
10           1990  5327231061  ...      43.0 %        2290228096
11           1985  4870921740  ...      41.2 %        2007939063
12           1980  4458003514  ...      39.3 %        1754201029
13           1975  4079480606  ...      37.7 %        1538624994
14           1970  3700437046  ...      36.6 %        1354215496
15           1965  3339583597  ...        N.A.              N.A.
16           1960  3034949748  ...      33.7 %        1023845517
17           1955  2773019936  ...        N.A.              N.A.

[18 rows x 9 columns]

您可以尝试下面的代码,它将生成所需的数据。如果您需要任何澄清,请告诉我:-

import requests
import pandas as pd
url = 'https://www.worldometers.info/world-population/'
html = requests.get(url).content
df_list = pd.read_html(html, header=0)
df = df_list[0]
    #print(df)
df.to_csv("data.csv", index=False)
给我下面的输出

print(df)
    Year (July 1)  Population  ... Urban Pop %  Urban Population
0            2020  7794798739  ...      56.2 %        4378993944
1            2019  7713468100  ...      55.7 %        4299438618
2            2018  7631091040  ...      55.3 %        4219817318
3            2017  7547858925  ...      54.9 %        4140188594
4            2016  7464022049  ...      54.4 %        4060652683
5            2015  7379797139  ...      54.0 %        3981497663
6            2010  6956823603  ...      51.7 %        3594868146
7            2005  6541907027  ...      49.2 %        3215905863
8            2000  6143493823  ...      46.7 %        2868307513
9            1995  5744212979  ...      44.8 %        2575505235
10           1990  5327231061  ...      43.0 %        2290228096
11           1985  4870921740  ...      41.2 %        2007939063
12           1980  4458003514  ...      39.3 %        1754201029
13           1975  4079480606  ...      37.7 %        1538624994
14           1970  3700437046  ...      36.6 %        1354215496
15           1965  3339583597  ...        N.A.              N.A.
16           1960  3034949748  ...      33.7 %        1023845517
17           1955  2773019936  ...        N.A.              N.A.

[18 rows x 9 columns]

向我们展示您迄今为止所做的尝试。欢迎来到so。阅读一些关于如何提问的技巧。照目前的情况,你的问题不能也不会得到回答。由于1)内容非常广泛,2)您没有显示任何代码来显示您尝试过的内容或让其他人复制您的问题。因此,我更新了我的问题。请不要为同一问题创建重复的问题。sry的副本,删除了之前的一个。向我们展示您迄今为止的尝试。欢迎使用so。阅读一些关于如何提问的技巧。照目前的情况,你的问题不能也不会得到回答。由于1)内容非常广泛,2)您没有显示任何代码来显示您尝试过的内容或让其他人复制您的问题。因此,我更新了我的问题。请不要为同一问题创建重复的问题。sry的副本,删除了同一站点上以前的oneWorld人口(2020年和历史),您可以现在就尝试NX吗……但是您能告诉我使用bs4的代码和不使用bs4的urs之间的区别是什么吗……当然,read_html方法非常简单,实际上是递归搜索表并返回数据帧列表。然后为它编制所需df的索引。你可以在同一个网站上浏览世界人口(2020年和历史)文档,你可以现在就试试NX吗……但是你能告诉我使用bs4的代码和不使用bs4的urs的代码之间的区别是什么吗……当然,read_html方法非常简单,实际上是递归搜索表并返回数据帧列表。然后为它编制所需df的索引。您实际上可以浏览文档