【问题标题】:BeautifulSoup is not reading the section tags as expectedBeautifulSoup 未按预期读取部分标签
【发布时间】:2017-07-11 13:46:40
【问题描述】:

从 edition.cnn.com/?refresh=1 获取数据进行测试

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

my_url = urlopen("http://edition.cnn.com/?refresh=1")

sauce = my_url.read()

soup = soup(sauce,"lxml")

my_div = soup.find("div",{"class":"pg-no-rail"})

my_sections = my_div.findAll("section")

for section in my_sections:
    print(section)

my_url.close()

但它读起来像:

<section class="zn--idx-0 zn-empty"> </section>
<section class="zn--idx-1 zn-empty"> </section>
<section class="zn--idx-2 zn-empty"> </section>
<section class="zn--idx-3 zn-empty"> </section>
<section class="zn--idx-4 zn-empty"> </section>
<section class="zn--idx-5 zn-empty"> </section>
<section class="zn--idx-6 zn-empty"> </section>
<section class="zn--idx-7 zn-empty"> </section>

我想到达图像中突出显示的 h2 元素

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    您尝试获取的元素在原始页面中不存在,而是使用 javascript 创建的。如果您查看页面的来源(右键单击并选择“查看来源”或类似),您将无法找到它。

    在我看来,您有三个选项,其中第三个可能最适合您的需求:

    1(执行javascript):为了能够解析您想要的东西,您需要在可以执行javascript的真实浏览器中加载页面。使用Selenium 在python 中执行此操作的一种方法。请参阅this post 以供参考。执行 Javascript 后,您可以解析页面并找到您要查找的元素。

    2(解析javascript):或者你可以尝试解析页面上的javascript,在那里你可以找到标题:

    为此,您可能希望使用正则表达式,而不是 BeautifulSoup

    3(解析 RSS-feed): 但最好的选择可能是使用以下 url 解析他们的 RSS-feed: http://rss.cnn.com/rss/edition.rss(或在 http://edition.cnn.com/services/rss/ 上找到的任何其他 URL)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2012-08-10
      相关资源
      最近更新 更多