python – 帮助(或建议)我开始使用lxml

我正在尝试学习python,我实际上觉得“学习python的硬道”,“一个字节的python”和“head first python”都是很棒的书.然而 – 现在我想开始一个“真正的”项目,lxml让我感觉像是一个完整的git.

这就是我想做的事(目标)

我正在试图解析报纸网站关于政治的文章

网址是http://politiken.dk/politik/

最终的项目应该

> 1)每天(也许每小时)访问
上面的URL
> 2)每个相关的
文章,我想将网址保存到
数据库.相关文章是
在一个< div class =“w460 section_forside
sec-forside“>.一些元素有图像,有些
别.

我想保存以下内容:

> a – 标题(< h1 class =“top-art-header fs-26”>)
> b – 副标题(< p class =“subheader-art”>)
> c – 如果元素具有相应的img,则为“alt”或“title”属性
> 3)访问每个相关的URL并刮取文章正文并将其保存到数据库中.
> 4)如果每个相关的URL已经在数据库中,那么我跳过该URL(上面定义的相关文章总是最新的10个发布)

期望的结果应该是包含字段的数据库表:

> art.i)身份证
> art.ii)网址
> art.iii)标题
> art.iiii)副标题
> art.iiiii)img alt
> art.iiiiii)文章正文.
> art.iiiiiii)日期和时间(位于< span class =“date tr-upper m-top-2”>中的字符串)

以上是我想要帮助完成的事情.由于屏幕抓取并不总是很好,我想解释为什么我要这样做.

基本上我想挖掘出现的数据
*或政党成员.我不会重新发布文章,出售数据或一些这样的东西(我没有检查我的方法的合法性,但希望并认为它应该是合法的)

我想我有一张政治家的桌子和一张政党桌子.

对于我将拥有的每位政治家:

> pol.i)ID
> pol.ii)first_name
> pol.iii)sur_name
> pol.iiii)派对

对于我将拥有的每个政党:

> party.i)ID
> party.ii)正确的名字
> party.iii)呼叫名称
-party.iiii)缩写

我想为几个丹麦报纸网站做这件事,然后分析一份报纸
为一些政客/政党提供优先权 – 仅仅基于提及的数量.

我还需要帮助 – 但一步一步:-)

后来我想探索NLTK和情绪挖掘的可能性.

我想看看这是否可以转为博士学位.政治科学/新闻学项目.

这基本上就是我所拥有的(即没有)

我真的很难把我的脑袋包裹在lxml,元素的概念,不同的解析等等.我当然读过教程,但我仍然非常困难.

import lxml.html

url = "http://politiken.dk/politik/"
root = lxml.html.parse(url).getroot()
# this should retur return all the relevant elements
# does not work:
#relevant = root.cssselect("divi.w460 section_forside sec-forside") # the class has spaces in the name - but I can't seem to escape them?

# this will return all the linked artikles headlines
artikler = root.cssselect("h1.top-art-header")

# narrowing down, we use the same call to get just the URLs of the articles that we have already retrieved
# theese urls we will later mine, and subsequently skip
retrived_urls=[]
for a in root.cssselect("h1.top-art-header a"):
    retrived_urls.append(a)
# this works. 

我希望从答案中得到什么

首先 – 只要你不叫我(非常糟糕)的名字 – 我会继续感到高兴.

>但我真正希望的是一个简单易懂的lxml如何工作的解释.如果我知道上述任务可以使用哪些工具,那么我真的很容易“潜入lxml”.也许是因为我的注意力短暂,当我读到的东西高于我的理解水平时,我现在感到失望,当时我甚至不确定我是否在寻找合适的位置.
>如果您可以提供适合某些任务的任何示例代码,那将非常棒.我希望把这个项目变成博士学位.但我相信这种事情一定已经完成了一千次了吗?如果是这样,根据我的经验,向他人学习是获得智慧的好方法.
>如果你强烈认为我应该忘记lxml并使用例如. scrapy或html5lib然后请这样说:-)我开始研究html5lib,因为Drew Conway在博客文章中建议政治科学家使用python工具,但我找不到任何介绍级材料. Alsp lxml是scraperwiki推荐的好人.按照scrapy,这可能是最好的解决方案,但我担心scrapy是一个很大的框架 – 如果你知道自己在做什么,并希望快速做到这一点真的很好,但也许不是最好的方法学习Python魔法.
>我打算使用关系数据库,但如果您认为例如mongo将是一个优势,我将改变我的计划.
>因为我无法在python 3.1中安装import lxml,所以我使用的是2.6.如果这是错误的 – 请同样说.

大体时间

我在*上问过一堆初学者问题.太多值得骄傲的.但是,如果有更多的全职工作,我似乎永远无法在代码中埋葬自己,只是吸收了我渴望的技能.我希望这将是一个问题/答案,我可以回过头来调整和更新我学到的东西,并重新学习我忘记的内容.这也意味着这个问题很可能会在相当长的一段时间内保持活跃.但我会评论我可能有幸收到的每一个答案,我会不断更新“我得到的”部分.

目前我觉得我可能已经咬了更多然后我可以咀嚼 – 所以现在又回到了“头脑第一Python”和“艰难地学习Python”.

最后的话

如果你已经走到这一步 – 你很惊讶 – 即使你没有回答这个问题.你现在已经阅读了许多简单,困惑和愚蠢的问题(我很自豪地提出了问题,所以不要争论).你应该抓一杯咖啡和一个无过滤的烟,祝贺你自己:-)

节日快乐(在丹麦,我们庆祝复活节,目前阳光照耀着纸浆小说中的Samual Jacksons钱包)

编辑的

看起来很美味汤是个不错的选择.根据开发人员的说法,如果我想使用python3,BeautifulSoup不是一个好选择.但是根据this我更喜欢python3(尽管不是很强烈).

我还发现在“潜入python 3”中有一个lxml章节.将调查那个以及.

解决方法:

这需要阅读很多 – 也许你可以分解成更小的具体问题.

关于lxml,here是一些例子. official documentation也非常好 – 花时间研究这些例子.邮件列表非常活跃.

关于BeautifulSoup,lxml是more efficient,根据我的经验,可以比BeautifulSoup更好地处理破碎的HTML.缺点是lxml依赖于C库,因此可能更难安装.

上一篇:Python 爬虫之数据解析模块lxml基础(附:xpath和解析器介绍)


下一篇:Scrapy在Ubuntu下的安装与配置