小编Luc*_*ang的帖子

通过BeautifulSoup或其他基于python的提取器识别大量文本

鉴于一些随机新闻文章,我想编写一个网络爬虫来查找最大的文本正文,然后将其解压缩.目的是提取页面上的实体新闻文章.

最初的计划是使用a BeautifulSoup findAll(True)并按其.getText()值对每个标记进行排序.编辑:不要将它用于html工作,使用lxml库,它是基于python的,比BeautifulSoup快得多.命令(表示提取所有html标签)

但这对大多数页面都不起作用,例如我列举的那个页面,因为大量的文本被分成许多较小的标签,例如段落分隔符.

有人对这个有经验么?任何有关此类事情的帮助都会令人惊叹.

目前我正在使用BeautifulSoup和python,但愿意探索其他可能性.


编辑:几个月后回到这个问题(哇我听起来像个白痴^),并用图书馆和自己的代码组合解决了这个问题.

这里有一些致命的有用的python库,按照它对我帮助程度的排序顺序完成任务:

1 goose library快速,强大,一致

2 可读性库内容可通过,平均速度比鹅慢,但比samppipe快

3 python-boilerpipe较慢且难以安装,对于boilerpipe库(最初在java中)没有错误,但是这个库是在java中的另一个库之上构建的,这个库属于IO时间和错误等.

如果有兴趣,我会发布基准测试.


间接相关的库,你应该安装它们并阅读他们的文档:

  • NLTK文本处理库这个太好了不能安装.它们提供文本分析工具以及html工具(如清理等).
  • lxml html/xml解析器上面提到过.这在各个方面都击败了BeautifulSoup,但可用性.这有点难以学习,但结果是值得的.HTML解析花费的时间少得多,非常明显.
  • python webscrapper库 我认为这段代码的价值不是lib本身,而是使用lib作为参考手册来构建自己的抓取器/提取器.它的编码/记录非常好!

使用python(一种相当慢的语言)的许多价值和力量来自它的开源库.当它们结合使用时,它们特别棒,每个人都应该利用它们来解决它们可能遇到的任何问题!

鹅图书馆得到了很多可靠的维护,他们只是添加了阿拉伯语支持,这太棒了!

python beautifulsoup web-crawler

8
推荐指数
1
解决办法
3627
查看次数

Facebook的Lint是抓取根URL而不是给定的URL

以前有关于此的帖子在网络上,但是所提出的解决方案都没有实际适用于我的场景.

我有一个子页面,它们都有自己独特的og标签,以及一个带有自己的og标签的父根域页面,所有这些都可以被Facebook抓取,这样人们就可以在发布时看到描述/图像.

但是,当我在框中发布我的孩子网址时,结果明显证明facebook已经抓取了父网页.甚至"看到我们的刮板看到的确切"页面也确认了这一点,因为它只显示了父模板.

这是fb's scrapper的链接:https://developers.facebook.com/tools/debug

以下是根域html模板中的og标记:假设父文件是www.me.com假设有一个孩子是www.me.com/path/path

<head> ...

    <meta name="keywords" content="...">

    <meta name="description" content="..." />

    <meta property="fb:app_id" content="..."/>
    <meta property="og:site_name" content="..." />
    <meta property="og:type" content="website" />
    <meta property="og:title" content="..." />
    <meta property="og:image" content="..." />
    <meta property="og:description" content="..." />
    <meta property="og:url" content="http://www.me.com" />
Run Code Online (Sandbox Code Playgroud)

以下是子html模板中的og标记:

<head> ...

    <meta name="keywords" content="...">

    <meta name="description" content="..." />

    <meta property="fb:app_id" content="..."/>
    <meta property="og:site_name" content="..." />
    <meta property="og:type" content="article" />
    <meta property="og:title" content="..." />
    <meta property="og:image" content="..." />
    <meta property="og:description" content="..." />
    <meta property="og:url" …
Run Code Online (Sandbox Code Playgroud)

opengraph facebook-graph-api facebook-opengraph

8
推荐指数
1
解决办法
1544
查看次数

芹菜与djcelery

在尝试在我的django项目上设置芹菜时,我对这两个应用程序之间的差异感到困惑.

两者之间有什么区别?在线阅读教程时,我看到它们都被使用了,我不确定哪种对我最好.似乎djcelery有点像芹菜,但为django量身定做?但是,当djcelery这样做时,celery不需要包含在已安装的应用程序中.

谢谢

python django celery djcelery

7
推荐指数
2
解决办法
4494
查看次数

如何将对象加载到内存中以供整个django项目查看?

我假设它只会被加载到settings.py中,然后该对象将从设置中导入,但我只是想知道是否有更标准或推荐的方法来执行此操作.人们通常在哪里装载他们整个项目需要看到的物品?

防爆.

# settings.py
...
something_large = json.loads(...)


# whatever models.py, views.py, etc
from Project.settings import something_large  #Is this the proper way to do it?
Run Code Online (Sandbox Code Playgroud)

谢谢.

python django

6
推荐指数
1
解决办法
1013
查看次数

如何在java的org.w3c.dom.Node中获取TEXT_NODE的标记名

在该接口的文档中,它声明文本节点都返回"#text"作为其名称而不是实际的标记名称.但是对于我正在做的事情,标签名称是必要的.

// I'm using the following imports
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;


// In the .xml input file
<country>US</country>  // This is a "text node" .getTextContent()
                       // returns "US", I need "country" and .getNodeName() 
                       // only returns "#text"
Run Code Online (Sandbox Code Playgroud)

我怎么能访问标签名称?这必须是某种可能的,我不介意一个hackish解决方案.

文档:

http://www.w3schools.com/dom/dom_nodetype.asp

http://www.w3.org/2003/01/dom2-javadoc/org/w3c/dom/Node.html

谢谢.

java w3c xmlnode xml-parsing

6
推荐指数
1
解决办法
7603
查看次数

如何在 VIM 中更改左侧装订线的颜色?

在 VIM 中,我使用了其他人的默认主题并进行了调整。左侧边沟的颜色是深灰色,这使得很难看到我的边沟的内容(在这种情况下是vim-gitgutter)。

例子:

在此处输入图片说明

如何更新 .vimrc 以更改此颜色?

谢谢

vim

6
推荐指数
1
解决办法
1114
查看次数

何时使用非比较排序而不是比较排序

为了避免omega(nlogn)所有基于比较的排序的下界,我们在课堂上学习了一堆新的非比较排序。但对我来说有点不清楚的是什么时候使用哪种排序算法系列的优点和缺点。

不能调整任何数据集以便可以使用非比较排序算法(基数、桶、键索引)吗?如果是这样,那么即使存在比较排序又有什么意义呢?

很抱歉这是一个如此基本的问题,但我真的在网上找不到任何东西。

sorting algorithm

5
推荐指数
1
解决办法
2750
查看次数

在python中反转hash()函数

不确定这是否可行,但在python中有一个hash()函数,它接受一个字符串或一个整数,并生成该输入的[EDIT not-unique]整数表示.

我的问题是(在线搜索后),如何将生成的整数反转回原始字符串.

谢谢.

python

5
推荐指数
4
解决办法
7097
查看次数

Python线程没有被垃圾回收

这是我的线程设置。在我的机器上,最大线程数为2047。

class Worker(Thread):
    """Thread executing tasks from a given tasks queue"""
    def __init__(self, tasks):
        Thread.__init__(self)
        self.tasks = tasks
        self.daemon = True
        self.start()

    def run(self):
        while True:
            func, args, kargs = self.tasks.get()
            try:
                func(*args, **kargs)
            except Exception, e:
                print e
            self.tasks.task_done()

class ThreadPool:
    """Pool of threads consuming tasks from a queue"""
    def __init__(self, num_threads):
        self.tasks = Queue(num_threads)
        for _ in range(num_threads):
            Worker(self.tasks)

    def add_task(self, func, *args, **kargs):
        """Add a task to the queue"""
        self.tasks.put((func, args, kargs))

    def wait_completion(self):
        """Wait for completion …
Run Code Online (Sandbox Code Playgroud)

python multithreading python-multithreading

5
推荐指数
1
解决办法
1944
查看次数

在python中的字符串上为"for each"循环更改分隔符

我需要通过逐行流式传输读取python中的输入文本文件.这意味着逐行加载文本文件而不是一次加载到内存中.但我的行分隔符不是空格,它们是任意字符.

这是Stack Overflow上用于逐行加载文件的方法:

with open("log.txt") as infile:
    for line in infile:
        do_something_with(line)
Run Code Online (Sandbox Code Playgroud)

以上是完美的,但我需要将分隔符从空格更改为不同的字符.

如何才能做到这一点?谢谢.

python

4
推荐指数
1
解决办法
1038
查看次数