Tyl*_*ler 6 html python xpath scrapy web-scraping
我有一个情况,我有很多<b>
标签:
<b>12</b>
<b>13</b>
<b>14</b>
<b></b>
<b>121</b>
Run Code Online (Sandbox Code Playgroud)
如您所见,倒数第二个标记为空.我打电话的时候:
sel.xpath('b/text()').extract()
Run Code Online (Sandbox Code Playgroud)
这给了我:
['12', '13', '14', '121']
Run Code Online (Sandbox Code Playgroud)
我想拥有:
['12', '13', '14', '', '121']
Run Code Online (Sandbox Code Playgroud)
有没有办法获得空值?
我目前的工作是致电:
sel.xpath('b').extract()
Run Code Online (Sandbox Code Playgroud)
然后我自己解析每个html标签(空标签在这里,这就是我想要的).
在这里可以手动剥离标签并获取文本。您可以使用remove_tags()
以下提供的功能w3lib
:
>>> from w3lib.html import remove_tags
>>> map(remove_tags, sel.xpath('//b').extract())
[u'12', u'13', u'14', u'', u'121']
Run Code Online (Sandbox Code Playgroud)
请注意,这w3lib
是一个Scrapy 依赖项,在内部使用。无需单独安装。
另外,最好在这里使用Scrapy
输入和输出处理器。继续使用sel.xpath('b')
并定义输入处理器。例如,您可以为类的特定Field
s定义它Item
:
from scrapy.contrib.loader.processor import MapCompose
from scrapy.item import Item, Field
from w3lib.html import remove_tags
class MyItem(Item):
my_field = Field(input_processor=MapCompose(remove_tags))
Run Code Online (Sandbox Code Playgroud)