有一个名为" name.txt"的文件。
内容如下
<td>
<input class="name" value="Michael">
<input class="age" value="22">
<input class="location" value="hebei">
</td>
<td>
<input class="name" value="Jack">
<input class="age" value="23">
<input class="location" value="NewYo">
</td>
现在我想使用pyquery获取所有输入标记,然后遍历输入标记
使用&#39; .filter&#39;获得所有名称类和年龄等级
最后,获取name和age的值,并将所有结果写入名为&#39; name_file.txt&#39;的文件中。
我的代码在
之下# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq
doc = pq(filename='name.txt')
input = doc('input')
for result in input.items():
name_result = result.filter('.name')
age_result = result.filter('.age')
name = name_result.attr('value')
age = age_result.attr('value')
print "%s:%s" %(name,age)
c = "%s:%s" %(name,age)
f = file('name_file.txt','w')
f.write(c)
f.close()
答案 0 :(得分:2)
第一个问题源于您循环遍历所有fade-in
元素(由<input ... >
收集),因此您只能获取名称或年龄,而不是两者。你可以做的是循环遍历各个doc('input')
块并提取匹配的孩子 - 有点浪费但是要与你的想法保持一致:
<td> ... </td>
至于第二部分 - 你是在写模式下打开你的from pyquery import PyQuery as pq
doc = pq(filename='name.txt') # open our document from `name.txt` file
for result in doc('td').items(): # loop through all <td> ... </td> items
name_result = result.find('.name') # grab a tag with class="name"
age_result = result.find('.age') # grab a tag with class="age"
name = name_result.attr('value') # get the name's `value` attribute value
age = age_result.attr('value') # get the age's `value` attribute value
print("{}:{}".format(name, age)) # print it to the STDOUT as name:age
文件,写一行然后在每个循环上关闭它 - 当你在写模式下打开文件时它将截断它中的所有内容你继续写每个循环的第一行。试着这样做:
name_file.txt
答案 1 :(得分:0)
from pyquery import PyQuery as pq
doc = pq(filename = 'text.txt')
input=doc.children('body')
f = file('name_file.txt', 'w')
for x in [result.html() for result in input.items('td')]:
x=pq(x)
name = x('input').eq(0).attr('value')
age = x('input').eq(1).attr('value')
print "%s:%s" % (name, age)
c = "%s:%s" % (name, age)
f.write(c)
f.close()
你不能在循环中使用文件打开语句,否则你只需要在每次循环迭代时只用一条记录覆盖文件。
同样,你在循环之后关闭它,而不是在插入每条记录之后关闭它。