标记后立即获取文本

时间:2019-05-07 21:56:03

标签: python web-scraping beautifulsoup

我目前正在网上抓取以查找某些场所的容纳人数。

通过驻地顾问进行抓取,并尝试获取html中可见的容量编号。

我可以解析得很近,但是我再也看不到我要查找的数字

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get('https://www.residentadvisor.net/club.aspx?id=4811', proxies={'http':'50.207.31.221:80'}).text  
soup = BeautifulSoup(page, 'lxml')

article = soup.find('ul', class_='clearfix')
for li in article.find_all('li'):
    for div in li.find_all('div'):
        print(div.text)

当前代码输出

Address /

Capacity /
Phone /
On the internet /

这是html行

<li>
 <div>
  Capacity /
 </div>
 100
</li>

我正在尝试获取100的价值。我该怎么办?

2 个答案:

答案 0 :(得分:3)

简而言之,在这种情况下,您可以使用div标签的同级标签:

>>> from bs4 import BeautifulSoup
>>> html = """\
... <li>
...  <div>
...   Capacity /
...  </div>
...  100
... </li>
... """
>>> soup = BeautifulSoup(html, "lxml")
>>> tag = soup.find('li')
>>> tag.find('div').next_sibling.strip()
'100'

在这里,tag.find('div').next_sibling实际上产生了一个bs4.element.NavigableString实例,它是str的一个轻子类,它知道它在DOM树中的位置,但是具有与str相同的方法会。

如@JackFleeting所指出的,等效路由为tag.contents[2].strip()

答案 1 :(得分:0)

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd


if __name__ == '__main__':
    page = requests.get('https://www.residentadvisor.net/club.aspx?id=4811', proxies={'http':'50.207.31.221:80'}).text
    soup = BeautifulSoup(page, 'lxml')

    article = soup.find('ul', class_='clearfix')
    for li in article.find_all('li'):
        # print(li.text) -> shows all of the li text
        print(li.contents[1]) # shows the 100 under capacity

所以您的代码无法正确识别100的原因是因为您正在调用div.text,它将在div组件中查找文本。但实际上,它是li标签的第二个孩子。希望这会有所帮助。