Python Scrapy-使用CSS查找可能包含不同子元素的元素
我使用Scrapy搜索与政治事件相关的一些数据字段:名称、时间、数据和位置。我意识到位置字段的HTML使用两种不同的格式:Python Scrapy-使用CSS查找可能包含不同子元素的元素,python,css,scrapy,Python,Css,Scrapy,我使用Scrapy搜索与政治事件相关的一些数据字段:名称、时间、数据和位置。我意识到位置字段的HTML使用两种不同的格式: <li class="eventlist-meta-item eventlist-meta-address event-meta-item"> 2168 Rayburn House Office Building </li> 问题是,在80个事件中,76个使用格式1,4个使用格式2,所以我得到80个事件,但只有76个地址。我希望能够以类似于
<li class="eventlist-meta-item eventlist-meta-address event-meta-item">
2168 Rayburn House Office Building
</li>
问题是,在80个事件中,76个使用格式1,4个使用格式2,所以我得到80个事件,但只有76个地址。我希望能够以类似于#1的单行格式获得使用上述格式#2的多行地址。从今天早上开始,我对Scrapy还不熟悉,我想知道:“我如何使用Scrapy查找下面有span标记的地址元素,以便将它们组合成一行地址?”也许可以尝试使用属性
[attr]
或通配符选择器*
?由于这两种格式在类为eventlist元地址-*
的元素中都包含文本,因此可以使用[class*=“eventlist元地址”]::text
或仅。eventlist元地址*::text
来自parsel导入选择器的
def extract_地址(sel:选择器)->str:
#这个也行
#metas=s.css('.eventlist元地址*::text').getall()
metas=s.css('[class*=“eventlist元地址”]::text')。getall()
返回“”。如果m.strip(),则连接(m.strip()表示元中的m)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
format1=''
2168雷伯恩大厦办公楼
'''
format2=''
圣。
华盛顿特区,20002年
美国
'''
对于[format1,format2]中的f:
s=选择器(f)
打印(摘录地址)
输出:
2168 Rayburn House Office Building
A St. Washington, DC, 20002 United States
您是否尝试过
addresses=''.join(选择器(…).css('..事件列表元地址行::文本').getall())
?感谢您的回复“加入”实际上并不能完全满足我的需要。让我看看是否能更好地解释这个问题。当我执行getall()获取地址时,我丢失了上面格式为#2的地址,因为这些地址位于span标记内,而格式为#1。我的问题是:我能根据元素是否包含子元素动态地刮取元素吗?啊,我明白了。看到我的答案了吗?你的意思是定义我的函数(参数:参数类型)->返回类型:
?它被称为类型注释,主要用于帮助编辑器/IDE自动完成代码。您可以删除它,当然,它对代码没有任何影响。
events = Selector(response=response).css('div.eventlist-column-info a.eventlist-title-link::text').getall()
addresses = Selector(response=response).css('div.eventlist-column-info li.eventlist-meta-item.eventlist-meta-address::text').getall()
2168 Rayburn House Office Building
A St. Washington, DC, 20002 United States