簡體   English   中英

Python Web Scraping表返回None

[英]Python Web Scraping table returns None

我正試圖從www.intellicast.com上刮下一張桌子的溫度元素

soup =  BeautifulSoup(urllib2.urlopen('http://www.intellicast.com/Local/History.aspx?location=USTX0057').read())
for row in soup('table',{'id':'dailyClimate'})[0].tbody('tr'):
  tds=row
  print tds

結果:TypeErrorL'NonType'對象不可調用

在查看頁面源代碼時我可以看到

<table id = "dailyClimate" class="Container">
  <tbody>
    <tr class="TitlesAvgRecord">
       <td..
    <td>...</td>

所以我知道有一個tbody和一個tr元素。

如果我為.tbody('td')更改.tbody('tr')我仍然會收到錯誤,所以我假設我假設錯誤是在某個地方調用tbody。

您的瀏覽器插入了一個<tbody>元素,但實際的源代碼沒有該元素:

<table id="dailyClimate" class="Container">
  <tr class="TitlesAvgRecord">
    <td style="padding-left:5px;">Date</td>
    <td>Average<br />Low</td>
    <td>Average<br />High</td>
    <td>Record<br />Low</td>
    <td>Record<br />High</td>
    <td>Average<br />Precipitation</td>
    <td>Average<br />Snow</td>
  </tr>

<!-- etc. -->

請參閱為什么瀏覽器將tbody元素插入表元素?

您可以使用html5lib解析器(使用BeautifulSoup(source, 'html5lib') ),這將插入元素。 但是,您不需要搜索它,只需直接轉到<tr>行:

for row in soup.find('table', id='dailyClimate').find_all('tr'):

或使用CSS選擇器:

for row in soup.select('table#dailyClimate tr'):

您通常只選擇tbody元素(如果可能有多個)或者您想要排除的theadtfooter元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM