维基百科表使用python进行刮擦

时间:2016-08-30 08:29:50

标签: python web-scraping beautifulsoup

我正试图从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

2 个答案:

答案 0 :(得分:0)

据我所知,该页面上没有这样的元素。主表格有"class":"wikitable sortable"但不是jquery-tablesorter

确保您知道要尝试选择的元素,并检查您的程序是否看到了您看到的相同元素,然后选择它。

答案 1 :(得分:0)

文档说您需要指定多个类:

soup.find("table", class_="wikitable sortable jquery-tablesorter")

另外,请考虑使用请求而不是urllib2。