Python 抓取一个非常典型的文本块
我正试着去刮这个积木:Python 抓取一个非常典型的文本块,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试着去刮这个积木: <b>Address:</b></br> First Line</br> Second Line</br> City, State Zip</br> <b>Phone: 718-555-2121</br> <b>Fax:</b> 718-555-1212</br> <b>Email:</b> ex@example
<b>Address:</b></br>
First Line</br>
Second Line</br>
City, State Zip</br>
<b>Phone: 718-555-2121</br>
<b>Fax:</b> 718-555-1212</br>
<b>Email:</b> ex@example.com</br>
如果我找粗体的,然后是下一个兄弟姐妹,我可以得到电话号码、传真和电子邮件,但地址是少数几个兄弟姐妹
for nut in soup.find_all("b"):
print nut,
try:
print nut.next_sibling.tag
except:
print nut.next_sibling
如果我查找bold和next_兄弟姐妹,我会得到所有兄弟姐妹:
for nut in soup.find_all("b"):
print nut
for s,sibling in enumerate(nut.next_siblings):
print s, (repr(sibling))
有没有一个干净的方法(
while
?)说,在你找到一个大胆的兄弟姐妹之前,继续集合下一个兄弟姐妹?好的,所以我用你的方法做了一些工作,我想到了这个
b = soup.b
results = []
result = str()
while b != None:
try:
if b.name == 'b':
results.append(result)
result = b.text
except AttributeError:
result = result + b
b = b.nextSibling
results.append(result)
我觉得有点难看。但是,这应该很容易理解
b.nextSibling
返回两种不同类型的对象,navigablesting
(如果是
)或标记(如果是新的
元素).name
是标记的有效方法,但不是可导航字符串的有效方法。通过使用try/except子句,您可以区分这两种情况b.nextSibling
在元素耗尽且循环中断时返回None
。最后一行附加了最后一个对象。地址行总是在地址:
之后的前三行吗?我只是将整个父元素放入一个字符串中,然后使用正则表达式来获取我想要的片段。@krativitea你必须处理整个“注释中的答案”的事情。@that不幸的是,不。地址可以是3-6行。@Amanda啊,但是是的,这次是建议,不是回答!如果你愿意,我可以试着编一些代码。但这样,你可以编写代码,我可以工作,当你把它作为回应发布时,我会投票给你我基本上只是继续前进,但这是重点。
b = soup.b
results = []
result = str()
while b != None:
try:
if b.name == 'b':
results.append(result)
result = b.text
except AttributeError:
result = result + b
b = b.nextSibling
results.append(result)