Python:BeautifulSoup并不总是获取所有文本数据

时间:2018-01-30 17:53:35

标签: python beautifulsoup

我的网络浏览器出现了一个奇怪的问题。我正在尝试使用BeautifulSoup从网站获取数据。

我的代码适用于我尝试过的所有链接的90%,但有一些链接不能完全读取页面。

引起我兴趣的是“1152x864” 在我的浏览器上检查源代码时,我清楚地看到了文字:

<li class="x-block-grid-item">
    <h3 style="margin: 0 0 0.35em;font-size: 1em;letter-spacing: 0.05em;line-height: 1">Resolution</h3>

    <p class="man">1152x864</p>
</li>

但是当我尝试通过BeautifulSoup获取源代码时,它只显示:

<li class="x-block-grid-item">
    <h3 style="margin: 0 0 0.35em;font-size: 1em;letter-spacing: 0.05em;line-height: 1">Resolution</h3>
</li>

这是我的代码:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://prosettings.net/counterstrike/fer/'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

containers = page_soup.findAll("li",{"class":"x-block-grid-item"})
cont_res = containers[8].p.text 
print("Res: " + cont_res) 

当我尝试不同的链接时,例如:     my_url ='https://prosettings.net/counterstrike/fallen/' 一切正常。

2 个答案:

答案 0 :(得分:0)

我习惯使用BeautifulSoup.text打印出每个标签及其子项的文本,但特别是这些df %>% mutate(data = map2(data, size, function(x, y) mutate(x, size = y))) 可能会有一些有趣的事情发生。无论如何,你没有得到正确的汤,所以也许尝试<p>而不是requests,然后用urllib直接挖掘<p>标签。

bs4

给我所有的课程=&#34; man&#34; site = 'https://prosettings.net/counterstrike/fer/' r = requests.get(site) soup = BeautifulSoup(r.content, 'html.parser') list2 = soup.find_all('p', class_='man') for item in list2: if item.find('p'): print(item.text) 标签&#39;信息:

<p>

它只是解决方案标签。不知道为什么。

答案 1 :(得分:0)

试试这个。它不应该让你失望:

from urllib.request import urlopen
from bs4 import BeautifulSoup

URL = 'https://prosettings.net/counterstrike/fer/'

res = urlopen(URL).read()
soup = BeautifulSoup(res, "lxml")
cont_res = ' '.join([item.find(class_="man").text for item in soup.find_all(class_="x-block-grid-item") if "Resolution" in item.text])
# or using .select()
# cont_res = ' '.join([item.select_one(".man").text for item in soup.select(".x-block-grid-item") if "Resolution" in item.text])
print("Res: " + cont_res)

输出:

Res: 1152x864