Python 如何对每个区块进行分组';将数据集中在一起,而不是按xpath分组?
假设我从如下结构中提取数据:Python 如何对每个区块进行分组';将数据集中在一起,而不是按xpath分组?,python,scrapy,Python,Scrapy,假设我从如下结构中提取数据: <div id="main"> <span class="name">$somename</span> <span class="email">$someemial</span> <span class="phone">$phone</span> </div> name1 email1 phone1 name2 email2 p
<div id="main">
<span class="name">$somename</span>
<span class="email">$someemial</span>
<span class="phone">$phone</span>
</div>
name1
email1
phone1
name2
email2
phone2
name3
email3
phone3
and so on ...
我得到的结果按如下方式分组:
name1
name2
name3 and so on...
then:
email1
email2
email3 and so on...
and finally:
phone1
phone2
phone3 and so on...
但是我想要的是这样分组数据:
<div id="main">
<span class="name">$somename</span>
<span class="email">$someemial</span>
<span class="phone">$phone</span>
</div>
name1
email1
phone1
name2
email2
phone2
name3
email3
phone3
and so on ...
我怎样才能用scrapy做到这一点
提前感谢我建议使用压缩变量。大概是这样的:
for sel in xpath('//body'):
name = sel.xpath('//div[@id="main"]/span[@class="name"]')
email = sel.xpath('//div[@id="main"]/span[@class="email"]')
phone = sel.xpath('//div[@id="main"]/span[@class="phone"]')
result = zip(name, email, phone)
for name, email, phone in result:
item['name'] = name
item['email'] = email
item['phone'] = phone
yield item
这更像是一个python问题。对于这种数据结构,实现这一点的最佳方法是使用字典:
dictExample={}
dictExample['name']=sel.xpath('//div[@id="main"]/span[@class="name"]')
dictExample['email']=sel.xpath('//div[@id="main"]/span[@class="email"]')
dictExample['phone']=sel.xpath('//div[@id="main"]/span[@class="phone"]')
通过执行打印示例,它将返回以下结果:
{'phone': '872934987', 'name': 'Rafael Alonso', 'email': 'example@example.com'}
现在,如果您想拥有多个词典,只需将它们附加到列表中:
listExample=[]
for i in range(0,5):
listExample.append(dictExample)