<br> 标签使用 scrapy 和 python 搞砸了我的数据
Posted
技术标签:
【中文标题】<br> 标签使用 scrapy 和 python 搞砸了我的数据【英文标题】:<br> tags screws up my data using scrapy and python 【发布时间】:2018-04-04 01:33:26 【问题描述】:我正在尝试使用 scrapy 抓取亚马逊上的评论文本。问题是当评论包含多个输入时,span 元素中的文本由 标签分隔。所以,当我想抓取第一个评论时,我会使用这行代码:
response.css('span.a-size-base.review-text::text').extract_first()
这并没有给我评论的所有文本,而只是 元素和第一个 元素之间的文本。
我知道当我用“extract()”替换“extract_first()”时,我会得到所有的文本。但是,这也给了我其他评论的文本。
基本上,extract() 方法返回一个数组,其中的元素由 标签分隔。我需要用 标签分隔它。
有没有办法刮掉打开的元素和关闭的元素之间的所有文本?
HTML 代码示例:
< span data-hook="review-body" class="a-size-base review-text">
"I like this product, the reasons why are explained below"
< br >
< br >
"1. It looks nice"
< br >
"2. I love it"
< /span >
网站上的样子:
我喜欢这个产品,原因在下面解释
-
看起来不错
我喜欢它
我将使用 extract_first() 得到的输出:
“我喜欢这个产品,原因在下面解释”
我将使用 extract() 得到输出(注意它由三个元素组成):
"我喜欢这个产品,原因在下面解释", "1. 看起来不错", “2. 我喜欢它”
我想得到的输出(只有一个元素,评论本身):
“我喜欢这个产品,原因解释如下 1. 很好看 2. 我喜欢”
【问题讨论】:
【参考方案1】:使用 extract() 并加入列表。
>>> text=["I like this product, the reasons why are explained below", "1. It looks nice", "2. I love it"]
>>> " ".join(text)
'I like this product, the reasons why are explained below 1. It looks nice 2. I love it'
【讨论】:
我以一篇评论为例。如果页面上有更多评论,extract() 的输出将包含更多评论。因此,如果我使用 join(text),我会将所有评论的文本合并到一个元素中。 还有问题吗? 是的,也许我的问题不清楚。但是当页面上有例如 2 条评论时,我将使用 join(text)。我会将 2 条评论放在一起,但我想将它们分开。 如果返回的列表包含两条评论,其中前两个元素是第一个评论的文本,其他三个元素是第二个评论的文本。我想要一个包含 2 个元素的列表,其中第一个元素是第一个评论,第二个元素是第二个评论。我知道您可以手动执行此操作,但如果事先不知道审阅者在其审阅中输入了多少,这是行不通的。以上是关于<br> 标签使用 scrapy 和 python 搞砸了我的数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google App Engine 和 Jinja2 允许 <br> 标签
使用 Google App Engine 和 Jinja2 允许 <br> 标签