在开始学习 Python 之后,我决定写一个网页抓取来查找给定网站中的公寓。这需要使用标准问题填写表单(例如city
,max
。price
,min
。number of rooms
等。
目标是设定我在表格中感兴趣的价值观,并对结果进行预先处理。
在开始分析html源代码后,我发现Internet站点有两类Tabs
<option selected="selected" value="cq144552099594975_tab1" class="tab-trigger">Appartment</option>
<option value="cq144552099594975_tab2" class="tab-trigger">Office</option>
<section class="tab" id="cq144552099594975_tab1">
<form class="form">
...
</form>
</section>
<section style="display: none;" class="tab" id="cq144552099594975_tab2">
<form class="form">
...
</form>
</section>
从查看html源代码有两个
<form class="form">
到目前为止,我能够使用
获取第一个类表单的html部分from urllib.request import urlopen
from bs4 import BeautifulSoup
bsObj = BeautifulSoup(html.read(), 'lxml' )
form = bsObj.body.form
我如何调整我的代码以便能够在两个表单类之间进行迭代?
有没有办法打印BeautifulSoup
对象(bsObj
)的结构树?
答案 0 :(得分:1)
对于表单迭代,您可以这样做:
for f in bsObj.body.find_all('form'):
# All forms in the html
if 'class' in f and f['class'] == 'form':
print(f) # All forms with class="form"
至于打印结构,BS对象有.children和.descendants属性,可以像这样使用:
# Print DIRECT children of body
for c in bsObj.body.children:
print(c)
# Print ALL children of body
for d in bsObj.body.descendants:
print(d)
如果你想要一些快速打印进行调试,你也可以像这样使用.prettify()方法:
print(bsObj.body.form.prettify())