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

标签 python screen-scraping lxml

我正在努力学习python,我真的觉得“在硬道上学习python”、“python的一个字节”和“head-first python”都是很棒的书然而,现在我想开始一个“真正的”项目,lxml让我感觉像一个完整的git。
这就是我想做的(目标)
我正在分析一篇关于政治的报纸网站文章
网址http://politiken.dk/politik/
最终的项目应该
1)每天(可能每小时)访问
以上网址
2)对于每个相关的
文章,我想将url保存到
数据库。相关条款如下
在a<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篇)
所需的结果应该是包含字段的数据库表:
第一条)身份证
第二条网址
第三条)标题
第二条)副标题
第三条
第三条)物品主体。
第三条)日期和时间(字符串位于<span class="date tr-upper m-top-2">
以上是我想帮助完成的。因为屏幕抓取并不总是好的,我想解释一下为什么我要这么做。
基本上我想挖掘
政党或政党的成员。我不会再版文章,出售数据或类似的东西(我没有检查我的方法的合法性,但希望和认为它应该是合法的)
我想我有一桌政客和一桌政党。
对于每一位政治家,我将拥有:
pol.i)身份证
pol.ii)名字
pol.iii)sur_名称
(ii)政党
对于每一个政党,我将拥有:
party.i)身份证
(二)正确名称
第三方名称
-党。ii)缩写
我想为几个丹麦报纸网站做这个,然后分析一家报纸
为一些政客/政党提供序言-仅基于提及次数。
我也需要帮助-但一步一个脚印:-)
稍后我将探讨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是一个优势,我会改变我的计划。
因为我无法在Python3.1中安装import lxml,所以我使用的是2.6。如果这是错误的-请也这么说。
时间表
我问了很多关于stackoverflow的初学者问题。太多了,不值得骄傲。但有了更多的全职工作,我似乎再也不能埋头于代码中,仅仅吸收我渴望已久的技能。我希望这将是一个问题/答案,我可以回来定期更新我所学到的,并重新学习我所忘记的这也意味着这个问题很可能在相当长的一段时间内保持活跃。但我会对每一个我有幸得到的答案发表评论,我会继续更新“我得到了什么”部分。
目前,我觉得我可能已经咬了更多,然后我可以咀嚼-所以现在回到“头先蟒蛇”和“学习蟒蛇的艰难方式”。
最后的话
如果你走到了这一步-你真是太棒了-即使你不回答这个问题。你现在已经读了很多简单,困惑,愚蠢的问题(我很自豪问那些问题,所以不要争论)你应该抓起一杯咖啡和一缕无尘的烟来祝贺自己:-)
节日快乐(在丹麦,我们庆祝复活节,现在阳光灿烂,就像拙劣小说中的萨缪尔·杰克森钱包)
编辑的
看来小汤是个不错的选择。但是根据开发人员的说法,如果我想使用python3,美化组不是一个好的选择。但根据this我更喜欢蟒蛇3号(虽然不是很强烈)。
我还发现“跳入python 3”中有一个lxml章节也会调查的。

最佳答案

这是很多要读的-也许你可以分成更小的具体问题。
关于lxml,here是一些例子official documentation也很好-花点时间来学习示例邮件列表非常活跃。
关于beautifulsoup,lxml是more efficient的,根据我的经验,它可以比beautifulsoup更好地处理断开的html。缺点是lxml依赖于C库,因此安装起来会更困难。

关于python - 帮助(或建议)我开始使用lxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757201/

相关文章:

python - 如何使用 lxml Python(来自 .XML 文件)有效解析特定行?

python - C 和 Python 三元运算符之间的区别

php - 从 PHP 页面调用时 Python 导入失败

javascript - 从包含大量 Javascript 的网页中抓取屏幕

java - Jsoup如何返回页面内脚本生成的电子邮件ID

python - 使用 lxml xpath 获取一个元素或引发异常

python - 在类外部定义实例变量

python - 将字符串添加到 Dataframe Python 中列的所有元素

http - 抓取时如何处理cookie

python - 如何在 Python 中解析此 XML 响应?