使用 HTML 解析器获取特定 div 的内容 [关闭]

Posted

技术标签:

【中文标题】使用 HTML 解析器获取特定 div 的内容 [关闭]【英文标题】:Using HTML parser to get contents of a particular div [closed] 【发布时间】:2014-04-06 08:13:30 【问题描述】:

我想使用一个 html 解析器,比如 beautiful soup (python) 来获取特定 div 的内容,通过运行一个 python 脚本将其中的所有数据存储在我的本地服务器中,该脚本将由 cron 在我的 Web 服务器上定期执行.

此外,我需要能够完全按照之前在我的网站上在网页中显示的内容显示这些内容。

如果 div 的内容只是文本,这很容易,但它是文本和图像的组合。 虽然偶尔会有 swf 文件,但我不想导入它们。

假设有问题的 div 称为“cont”。 最好的方法是什么?

【问题讨论】:

最好的方法应该是先写一些代码,tbh。否则,您所要求的范围太广了。 写完问题后,我认为 XML 可能是一种方法。你认为这是个好主意吗? 确实有可能。但是,如果要解析的页面很小,我不明白为什么 urllib 和 bs4 或 lxml 的简单组合是不够的。您也可以离线存储图像,可能存储在 Python 已经拥有丰富资源的数据库中。 :) 如果没问题,您要抓取的 URL 和特定 div 是什么? 哦..我不知道存在这样的东西(bs4和lxml)我会看看它们。谢谢 :) (刚刚意识到 bs4 是 beautifulsoup 哈哈) 【参考方案1】:

幸运的是,我有一个蜘蛛,它完全可以做你需要做的事情。

from soup import BeautifulSoup as bs
from scrapy.http import Request
from scrapy.spider import BaseSpider
from hn.items import HnItem


class HnSpider(BaseSpider):
    name = 'hn'
    allowed_domains = []
    start_urls = ['http://news.ycombinator.com']

    def parse(self, response):
        if 'news.ycombinator.com' in response.url:
            soup = bs(response.body)
            items = [(x[0].text, x[0].get('href')) for x in
                     filter(None, [
                         x.findChildren() for x in
                         soup.findAll('td', 'class': 'title')
                     ])]

            for item in items:
                print item
                hn_item = HnItem()
                hn_item['title'] = item[0]
                hn_item['link'] = item[1]
                try:
                    yield Request(item[1], callback=self.parse)
                except ValueError:
                    yield Request('http://news.ycombinator.com/' + item[1], callback=self.parse)

                yield hn_item

请参阅Github link 了解更多信息。

【讨论】:

这太棒了!感谢您的帮助:)

以上是关于使用 HTML 解析器获取特定 div 的内容 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用jquery怎么获取页面的特定内容

特定的 Java HTML 解析器 [重复]

jQuery 选择器:获取包含特定单词的第一个元素类的内容

通过outerHTML获取HTML内容并去掉一个div

[使用php解析器获取带有类的p标记中的所有子项

解析目录中的 html 文件并使用 BeautifulSoup 删除特定标签