当我尝试从网页上抓取数据时,为什么会得到Nonetype?

时间:2019-05-13 23:04:24

标签: python web-scraping beautifulsoup

我正尝试从以下链接的表格中抓取信息:

https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1010014101

但是,当我尝试抓取数据时,我一直得到NoneType。

这是我尝试过的代码

import requests
from bs4 import BeautifulSoup
page=requests.get('https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1010014101')
soup=BeautifulSoup(page.content,'html5lib')
x=soup.find('main',role='main')
print(x)

我很想知道我在做错什么。

1 个答案:

答案 0 :(得分:0)

网站可能会根据您缺少用户代理的情况而将

requests.get()过滤掉。您是否尝试过使用硒?

from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome()
url= "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1010014101"
driver.maximize_window()
driver.get(url)

time.sleep(5)
content = driver.page_source.encode('utf-8').strip()
soup = BeautifulSoup(content,"html.parser")


data = []
table = soup.find('table', attrs={'class':'pub-table'})
table_body = table.find('tbody')

rows = table_body.find_all('tr')
for row in rows:
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    data.append([ele for ele in cols if ele])

print(data)

一旦我下载了ChromeDriver并将其解压缩到与脚本相同的目录中,此代码将为我打印以下内容:

[[], ['..', '..', '..', '..', '85,120'], ['..', '..', '..', '..', '49,637'], ['..', '..', '..', '..', '24,056'], ['..', '..', '..', '..', '0'], ['..', '..', '..', '..', '8,462'], ['..', '..', '..', '..', '2,965']]