Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 抓取一个非常典型的文本块_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

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)