有人能解释一下这个过滤是如何和靓汤一起工作的吗。我得到了下面的HTML,我正试图从中筛选特定的数据,但我似乎无法访问它。我尝试了各种方法,从收集所有的class=g
到只抓取特定div中感兴趣的项目,但是我没有得到任何返回或打印。在
每一页都有一个<div class="srg">
div和多个<div class="g">
div,我要使用的数据是包含<div class="g">
的数据。每一个都有
多个div,但我只对<cite>
和{
我尝试过遍历div并获取相关字段:
soup = BeautifulSoup(response.text)
main = soup.find('div', {'class': 'srg'})
result = main.find('div', {'class': 'g'})
data = result.find('div', {'class': 's'})
data2 = data.find('div')
for item in data2:
site = item.find('cite')
comment = item.find('span', {'class': 'st'})
print site
print comment
我也尝试着进入最初的div并找到所有的
^{pr2}$测试数据
<div class="srg">
<div class="g">
<div class="g">
<div class="g">
<div class="g">
<!--m-->
<div class="rc" data="30">
<div class="s">
<div>
<div class="f kv _SWb" style="white-space:nowrap">
<cite class="_Rm">http://www.url.com.stuff/here</cite>
<span class="st">http://www.url.com. Some info on url etc etc
</span>
</div>
</div>
</div>
<!--n-->
</div>
<div class="g">
<div class="g">
<div class="g">
</div>
更新
在Alecxe的解决方案之后,我又尝试了一次,但仍然没有打印任何内容。所以我决定再看一眼soup
,它看起来不一样。我以前在看response.text
,来自requests
。我只能认为BeautifulSoup
修改了response.text
,或者我第一次不知怎么把样本弄错了(不知道怎么回事)。但是下面是一个新的示例,它基于我从soup
打印中看到的内容。在这下面,我试图得到我想要的元素数据。在
<li class="g">
<h3 class="r">
<a href="/url?q=url">context</a>
</h3>
<div class="s">
<div class="kv" style="margin-bottom:2px">
<cite>www.url.com/index.html</cite> #Data I am looking to grab
<div class="_nBb">
<div style="display:inline"snipped">
<span class="_O0"></span>
</div>
<div style="display:none" class="am-dropdown-menu" role="menu" tabindex="-1">
<ul>
<li class="_Ykb">
<a class="_Zkb" href="/url?/search">Cached</a>
</li>
</ul>
</div>
</div>
</div>
<span class="st">Details about URI </span> #Data I am looking to grab
更新尝试
我试着采用亚历克斯的方法,但到目前为止没有成功,我走的路对吗?在
soup = BeautifulSoup(response.text)
for cite in soup.select("li.g div.s div.kv cite"):
span = cite.find_next_sibling("span", class_="st")
print(cite.get_text(strip=True))
print(span.get_text(strip=True))
您不必手动处理层次结构-让
BeautifulSoup
来操心它。您的第二种方法与您真正应该尝试的方法很接近,但是一旦您获得了包含class="s"
的div
,并且其中没有cite
元素,它就会失败。在相反,您需要让
BeautifulSoup
知道您对包含特定元素的特定元素感兴趣。让我们请求位于div
内的cite
元素,其中class="g"
位于div
元素内,其中class="srg"
-div.srg div.g cite
CSS selector元素可以准确地找到我们要问的内容:然后,一旦找到
cite
,我们就“往一边走”,用class="st"
抓取下一个span
同级元素。不过,是的,我们假设它存在。在对于提供的示例数据,它将打印:
^{pr2}$更新的输入数据的更新代码:
另外,请确保您使用的是第四个版本:
进口声明应为:
首先获取类名为}的文本。以下是我的工作守则-
srg
的div
,然后在这个srg
中找到所有类名为s
的div,并得到site
和{输出-
^{pr2}$编辑
为什么你的代码不起作用
试一下-
您使用的是}。所以这段代码的下一部分就行不通了。在
result = main.find('div', {'class': 'g'})
,它将获取第一个遇到的单个元素,但第一个元素没有类名为s
的{尝试二-
您正在打印不在打印范围内的}。所以试着在内部打印for循环。在
site
和{相关问题 更多 >
编程相关推荐