删除没有/ text().extract()的HTML标记

Par*_*00n 6 python scrapy python-2.7

首先,我对此非常新,所以请准备好从我复制/粘贴来自各种来源的代码.

我希望能够删除任何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>
Run Code Online (Sandbox Code Playgroud)

没有一种模式,我可以在使用/文本之间选择,我正在寻找初学者可以实现的最简单的方法,将剥离所有这些.

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()
Run Code Online (Sandbox Code Playgroud)

转换器= html2text是我最后一次尝试删除它,我不完全确定我正确实现它但它没有用.

提前感谢您提供的任何帮助,如果我遗漏了一些简单的快速搜索,我也会道歉.

Rej*_*ted 18

Scrapy的作者使用了一大堆这种功能,w3lib它是Scrapy的一部分/包含在Scrapy中.

根据您的代码,您使用的是一个非常过时的Scrapy版本(0.22之前).我不知道什么是提供给你,所以你可能需要从进口scrapy.utils.markup替代

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

>>> 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    '
Run Code Online (Sandbox Code Playgroud)

使用w3lib修复/转换html /标记还有很多其他功能(此处提供代码).

由于这只是一个功能,它很容易合并到您的项目加载器中,并且比使用BS4更轻量级.