python - 如何从 HTML 文件中的某一行开始抓取数据

标签 python html web-scraping beautifulsoup

我正在尝试从 HTML 文件中抓取数据。它看起来像这样:

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

现在我想按照订阅者数量的顺序将 Reddit 版主(或 Reddit 子版主)放入列表中。为此,我只需要查看这行代码之后的数据:

<h3 class="listing-header">Subscribers</h3>

此行之前的所有内容都是无关紧要的,此行之后有关 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 名称?

最佳答案

尝试查找 <h3 class="listing-header">Subscribers</h3> ,然后获取父项 div ,范围将限制为Subscribers分区然后找到所有class为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())

关于python - 如何从 HTML 文件中的某一行开始抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859242/

相关文章:

javascript - PHP 从 Ajax 调用重定向

html - 对齐多个标签

python - 无法在获取请求中使用 json 参数获得所需的响应

python - For 在 for 循环中配置 matplotlib 子图

python - 如何删除 Pandas 数据透视表中的多级索引

当我包含一行代码时,javascript 表单验证总是返回 true

ruby - HTTParty 不会在 Ruby 文件中加载

python - Google 趋势 - 配额限制 - IP 地址更改器

Python 嵌套对象无法检索函数中的值

python - Pandas 在一列中替换多个值