使用 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 的内容 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章