我目前正在网上抓取以查找某些场所的容纳人数。
通过驻地顾问进行抓取,并尝试获取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的价值。我该怎么办?
答案 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标签的第二个孩子。希望这会有所帮助。