我尝试编写for循环来浏览包含.done()
和th
标记的HTML表格。它包含在URL中:
td
我认为https://www.saa.gov.uk/search.php?SEARCHED=1&SEARCH_TABLE=valuation_roll_cpsplit&SEARCH_TERM=edinburgh%2C+GOGARBANK%2C+EDINBURGH%2C+Edinburgh%2C+City+Of&x=16&y=8&DISPLAY_COUNT=10&ASSESSOR_ID=&TYPE_FLAG=CP&ORDER_BY=PROPERTY_ADDRESS&H_ORDER_BY=SET+DESC&DRILL_SEARCH_TERM=GOGARBANK%2C+EDINBURGH%2C+Edinburgh%2C+City+Of&DD_UNITARY_AUTHORITY=Edinburgh%2C+City+Of&DD_TOWN=EDINBURGH&DD_STREET=GOGARBANK&DISPLAY_MODE=FULL&UARN=103G494E2%28B%29&PPRN=000000000000532&ASSESSOR_IDX=10&#results'
用于表格标题,我想提取th
(表格数据)。我试图使用的td
循环给出了一个错误:
for
有人可以向我解释为什么好吗?我想要的输出是
range() integer end argument expected, got Tag.
我也尝试过使用
103G494E2(B)(LOTHIAN VJB)
YARD
但它给了我一个错误for i in range(len(elems)):
。在这种情况下,使用范围函数将object of type 'int' has no len()
定义为整数吗?这种方法以前对我有用,所以不太确定为什么这次会这样做。非常感谢。
i
答案 0 :(得分:1)
您不需要使用范围,您应该使用enumerate()
只使用for i,elem in enumerate(elems)
,然后检查elem
而不是elems[i]
。使用enumerate
还可以跟踪索引,以便您可以访问data
中的正确元素。
for循环看起来像这样:
for col in rslt_table:
elems = col.find_all("th")
data = col.find_all("td")
for i,elem in enumerate(elems):
if elem.text == "Ref No. / Office":
ref = data[i].text
print ref
if elem.text == 'Description':
vsr = data[i].text
print vsr
您还应该使用find_all()
代替find()
来获取商品列表,而不仅仅是单个商品。所以你的rslt_table
应该是这样的:
rslt_table = html.find_all("table", {"summary":"Property details"})
答案 1 :(得分:0)
你犯了几个错误。首先,find返回一个元素 - 要获取元素集合,必须在任何地方使用find_all。范围不是一个元素,也不是一个列表;使用enumerate()或range(len())。
固定代码
rslt_table = html.find_all("table", {"summary":"Property details"})
for col in rslt_table:
elems = col.find_all("th")
data = col.find_all("td")
for i, e in enumerate(elems):
if e.text == "Ref No. / Office":
ref = data[i].text
print(ref)
if e.text == 'Description':
vsr = data[i].text
print(vsr)