如何从某一行开始在HTML文件中获取数据

2024-06-16 17:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个HTML文件中获取数据。看起来像这样:

from bs4 import BeautifulSoup as bs
import urllib
redditPage1 = "http://redditlist.com/sfw"
r=urllib.urlopen(redditPage1).read()
soup = bs(r)

现在我想让reddit版主(或subredditor,他们被称为subredditor)按其订户数量的顺序排列在一个列表中。为此,我只需要查看这行代码后面的数据:

^{pr2}$

这一行前面的所有内容都是无关的,关于这行后面的subredditor的所有条目如下所示:

<div class="listing-item" data-target-filter="sfw" data-target-subreddit="funny">
<div class="offset-anchor" id="funny-subscribers"></div>
<span class="rank-value">1</span>
<span class="subreddit-info-panel-toggle sfw"> <div>i</div> </span>
<span class="subreddit-url">
<a class="sfw" href="http://reddit.com/r/funny" target="_blank">funny</a>
</span>
<span class="listing-stat">18,197,786</span>
</div>

我该怎么做才能提取出这行后面而不是前面的subredditor名称?在


Tags: importdivcomhttptargetbsurllibclass
3条回答

让你的代码更具可读性。在

import requests
from lxml.html import fromstring

res = requests.get("http://redditlist.com/sfw").text
root = fromstring(res)
for container in root.cssselect(".listing"):
    if container.cssselect("h3:contains('Subscribers')"):
        for subreddit in container.cssselect(".listing-item"):
            print(subreddit.attrib['data-target-subreddit'])

或者使用BeautifulSoup如果您喜欢:

^{pr2}$

试试这个:

for div in soup.select('.span4.listing'):
    if div.h3.text.lower()=='subscribers':
        output = [(ss.select('a.sfw')[0].text, ss.select('.listing-stat')[0].text) for ss in div.select('.listing-item')]

尝试找到<h3 class="listing-header">Subscribers</h3>,然后得到父元素div,作用域将限制为Subscribersdiv。然后找到所有类为listing-item的div,循环它们以获得内部元素<a>的文本(名称):

from bs4 import BeautifulSoup as bs
import urllib
redditPage1 = "http://redditlist.com/sfw"
r=urllib.urlopen(redditPage1).read()
soup = bs(r,'lxml')
for sub_div in soup.find("h3", text="Subscribers").parent.find_all('div',{ "class" : "listing-item" }):
    print(sub_div.find('a').getText())

相关问题 更多 >