Mat*_*ias 5 python beautifulsoup
我是第一次在这里试图获取一些Python技能的海报; 请善待我:-)
虽然我不是编程概念的完全陌生人(我以前一直在乱用PHP),但过渡到Python对我来说有点困难.我想这主要与我缺乏大多数 - 如果不是全部 - 基本理解常见的"设计模式"(?)等事实有关.
话虽如此,这就是问题所在.我目前的项目的一部分涉及利用Beautiful Soup编写一个简单的刮刀.要处理的数据具有与下面列出的数据有些类似的结构.
<table>
<tr>
<td class="date">2011-01-01</td>
</tr>
<tr class="item">
<td class="headline">Headline</td>
<td class="link"><a href="#">Link</a></td>
</tr>
<tr class="item">
<td class="headline">Headline</td>
<td class="link"><a href="#">Link</a></td>
</tr>
<tr>
<td class="date">2011-01-02</td>
</tr>
<tr class="item">
<td class="headline">Headline</td>
<td class="link"><a href="#">Link</a></td>
</tr>
<tr class="item">
<td class="headline">Headline</td>
<td class="link"><a href="#">Link</a></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
主要问题是我无法理解如何1)跟踪当前日期(tr-> td class ="date"),同时2)循环后续tr:s中的项目(tr class ="item" - > td class ="headline"和tr class ="item" - > td class ="link")和3)将处理后的数据存储在数组中.
此外,所有数据都将插入到数据库中,其中每个条目必须包含以下信息;
请注意,crud:数据库不是问题的一部分,我只是提到这一点,以便更好地说明我在这里要完成的事情:-)
现在,有许多不同的方法可以给猫皮肤.因此,尽管手头问题的解决方案确实非常受欢迎,但如果有人愿意详细阐述您为了"攻击"这类问题而使用的实际逻辑和策略,我将非常感激:-)
最后但同样重要的是,对于这样一个无聊的问题感到抱歉.
基本问题是该表标记为外观,而不是语义结构.如果处理得当,每个日期及其相关项目应该共享一个父项.不幸的是,他们没有,所以我们必须做.
基本策略是遍历表中的每一行
.
import BeautifulSoup
fname = r'c:\mydir\beautifulSoup.html'
soup = BeautifulSoup.BeautifulSoup(open(fname, 'r'))
items = []
last_seen_date = None
for el in soup.findAll('tr'):
daterow = el.find('td', {'class':'date'})
if daterow is None: # not a date - get headline and link
headline = el.find('td', {'class':'headline'}).text
link = el.find('a').get('href')
items.append((last_seen_date, headline, link))
else: # get new date
last_seen_date = daterow.text
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7475 次 |
| 最近记录: |