gpt4 book ai didi

python - 删除没有/text().extract() 的 HTML 标签

转载 作者:太空狗 更新时间:2023-10-29 22:04:45 29 4
gpt4 key购买 nike

首先,我对这一切都很陌生,所以请准备好我从各种来源复制/粘贴的一些代码。

我希望能够删除 scrapy 返回的任何 html 代码。我已将所有内容存储在 MySQL 中,没有任何问题,但我无法开始工作的是删除大量“< td >”和其他 html 标签。我最初只是使用/text().extract() 运行,但它会随机遇到一个以这种方式格式化的单元格:

<td>    <span class="caps">TEXT</span>  </td>
<td> Text </td>
<td> Text </td>
<td> Text </td>
<td> Text </td>

没有一个模式可以让我在使用/text 之间做出选择,我正在寻找初学者可以实现的最简单的方法,它将去除所有这些。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import Join, MapCompose
import html2text
from scraper.items import LivingSocialDeal


class CFBDVRB(BaseSpider):
name = "cfbdvrb"
allowed_domains = ["url"]
start_urls = [
"url",
]

deals_list_xpath = '//table[@class="tbl data-table"]/tbody/tr'
item_fields = {
'title': './/td[1]',
'link': './/td[2]',
'location': './/td[3]',
'original_price': './/td[4]',
'price': './/td[5]',
}

def parse(self, response):
selector = HtmlXPathSelector(response)

for deal in selector.xpath(self.deals_list_xpath):
loader = XPathItemLoader(LivingSocialDeal(), selector=deal)

# define processors
loader.default_input_processor = MapCompose(unicode.strip)
loader.default_output_processor = Join()

# iterate over fields and add xpaths to the loader
for field, xpath in self.item_fields.iteritems():
loader.add_xpath(field, xpath)

converter = html2text.HTML2Text()
converter.ignore_links = True
yield loader.load_item()

converter = html2text 是我最后一次尝试以这种方式删除它,我不确定我是否正确实现了它,但它没有用。

提前感谢您提供的任何帮助,如果我遗漏了一些简单的快速搜索可以找到的东西,我也深表歉意。

最佳答案

Scrapy 的作者在他们的 w3lib 中使用了很多这样的功能,它是 Scrapy 的一部分/包含在 Scrapy 中。

根据您的代码,您使用的是相当过时的 Scrapy 版本(0.22 之前)。我不确定您可以使用什么,因此您可能需要从 scrapy.utils.markup 导入

如果您有包含 HTML 文本的变量 my_text,请执行以下操作:

>>> from w3lib.html import remove_tags
>>> my_text
'<td> <span class="caps">TEXT</span> </td>\n<td> Text </td>\n<td> Text </td>\n<td> Text </td>\n<td> Text </td>'
>>> remove_tags(my_text)
u' TEXT \n Text \n Text \n Text \n Text '

使用 w3lib(可用代码 here)修复/转换 html/标记有很多附加功能。

因为这只是一个函数,所以很容易将其合并到您的项目加载器中,并且比使用 BS4 更轻量级。

关于python - 删除没有/text().extract() 的 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307073/

29 4 0