我正试图从wikipedia抓取表格。我写了一个表刮板,下载表并将其保存为pandas数据框。
这是代码
from bs4 import BeautifulSoup
import pandas as pd
import urllib2
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population', None, headers)
html = urllib2.urlopen(req).read()
soup = BeautifulSoup(html, 'lxml') # Parse the HTML as a string
print soup
# Create an object of the first object
table = soup.find("table", {"class":"wikitable sortable jquery-tablesorter"})
print table
rank=[]
country=[]
pop=[]
date=[]
per=[]
source=[]
for row in table.find_all('tr')[1:]:
col=row.find_all('td')
col1=col[0].string.strip()
rank.append(col1)
col2=col[1].string.strip()
country.append(col2)
col3=col[2].string.strip()
pop.append(col2)
col4=col[3].string.strip()
date.append(col4)
col5=col[4].string.strip()
per.append(col5)
col6=col[5].string.strip()
source.append(col6)
columns={'Rank':rank,'Country':country,'Population':pop,'Date':date,'Percentage':per,'Source':source}
# Create a dataframe from the columns variable
df = pd.DataFrame(columns)
df
但它没有下载表格。问题出在本节
table = soup.find("table", {"class":"wikitable sortable jquery-tablesorter"})
print table
其中输出为None
答案 0 :(得分:0)
据我所知,该页面上没有这样的元素。主表格有"class":"wikitable sortable"
但不是jquery-tablesorter
。
确保您知道要尝试选择的元素,并检查您的程序是否看到了您看到的相同元素,然后选择它。
答案 1 :(得分:0)
文档说您需要指定多个类:
soup.find("table", class_="wikitable sortable jquery-tablesorter")
另外,请考虑使用请求而不是urllib2。