python - Scrapy - 删除列表输出中的 html 标签
问题描述
我正在尝试编写一个小脚本来提取蒸汽游戏标签并将它们存储在 csv 文件中。我目前遇到的问题是我不知道如何从输出中删除 html 标签。我的代码如下
from __future__ import absolute_import
import scrapy
from Example.items import SteamItem
from scrapy.selector import HtmlXPathSelector
class SteamSpider(scrapy.Spider):
name = 'steamspider'
allowed_domains = ['https://store.steampowered.com/app']
start_urls = ["https://store.steampowered.com/app/578080/PLAYERUNKNOWNS_BATTLEGROUNDS/",]
def parse(self, response):
hxs = HtmlXPathSelector(response)
tags = hxs.xpath('//*[@id="game_highlights"]/div[1]/div/div[4]/div/div[2]')
for sel in tags:
item = SteamItem()
item['gametags'] = sel.xpath('.//a/text()').extract()
item['gametitle'] = sel.xpath('//html/body/div[1]/div[7]/div[3]/div[1]/div[2]/div[2]/div[2]/div/div[3]/text()').extract()
yield item
我的物品类别:
class SteamItem(scrapy.Item):
#defining item fields
url = scrapy.Field()
gametitle = scrapy.Field()
gametags = scrapy.Field()
然后我的输出如下所示:
[u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tSurvival\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tShooter\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tMultiplayer\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tPvP\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tThird-Person Shooter\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tFPS\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tAction\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tBattle Royale\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tOnline Co-Op\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tTactical\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tCo-op\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tEarly Access\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tFirst-Person\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tViolent\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tStrategy\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tThird Person\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tCompetitive\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tTeam-Based\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tDifficult\t\t\t\t\t\t\t\t\t\t\t\t',
u'\r\n\t\t\t\t\t\t\t\t\t\t\t\tSimulation\t\t\t\t\t\t\t\t\t\t\t\t'],
我的目标是删除所有标签 "u'\r\n\t.....\t
有任何想法吗?
谢谢!
解决方案
由于您使用的是 Scrapy 框架,因此您可以使用 Scrapy 附带的名为 w3lib 的库
import w3lib.html
output= w3lib.html.remove_tags(input)
print(output)
scrapy.utils.markup 于 2019 年贬值,请改用 w3lib。
您可以参考https://w3lib.readthedocs.io/en/latest/index.html了解更多信息。
推荐阅读
- confluent-platform - 可以远程控制 Confluent 控制中心 Web UI 吗?
- angular - Angular 2 使用带有强制参数的服务
- sql-server - SQL Server 的 Logstash 时区异常
- sql - Postgres SQL Case Join 在第一个案例匹配时不停止
- docker - Docker构建不工作-权限被拒绝
- python - 使用 python 请求上传时文件获取已更改
- kubernetes - 使用 Istio 跨 K8s 集群在内部路由加权流量
- reactjs - 如何在状态 React Native 中设置数组特定值
- c++ - 下载时 C++ 解密
- python - 将前导数字添加到 Dataframe 中的数字