【问题标题】:Python PhantomJS & Beautifulsoup Scraping Java - What's Missing Here?Python PhantomJS 和 Beautifulsoup 抓取 Java - 这里缺少什么?
【发布时间】:2016-04-11 00:37:38
【问题描述】:

抓取静态页面可以这样工作:

soup = BeautifulSoup(driver.page_source, "lxml")


for results in soup.findAll("li", {"class" : "open"}):
    print(results.get_text())

但是 Javascript 网站给我带来了问题。

所以我使用的是 PhantomJS,一开始的明显想法是“它只是在我尝试抓取时没有加载”。

所以我陷入了 time.sleep(不理想 - 我知道我会换成一个 present_of_element_locate)和一个:

driver.save_screenshot('screenshot.png') # save a screenshot to disk

该屏幕截图显示我正在查找的数据已加载。对于没有使用 Java 加载的元素,我可以使用与上面相同的代码从该页面上刮下其他数据。

根据屏幕截图,数据在页面上。而且我使用的数据与在 .Net 库上使用的数据相同,这些库可以很好地读取相同的站点。

for names in soup.findAll("span", {"class" : "the-name ng-name ng-big-scope"}):
        print(names)

我在这里删除了 .get_text() 以防万一这会导致某些问题。但无论哪种方式,这都不会返回。我不知道为什么。

我可以在 vb.net 中使用完全相同的数据:

 For Each element As HtmlElement In Me.Browser.Document.GetElementsByTagName("span")
   If element.GetAttribute("className").Contains("the-name ng-name ng-big-scope") Then
                    print(element.innertext)
   End If
Next

我知道我在那里的 .net 示例中使用了 .contains,但在这种情况下,我已经三次检查它是正确的类名。

所以语法适用于静态数据。 我有类名等......因为我可以在.Net上刮掉它。 我正在查找的数据已加载(根据它所获取的屏幕截图)。

我被难住了。非常感谢任何能指出我在这里搞砸的人。

/编辑:

我在另一个基于 Javascript 的网站上进行了测试,得到了第一个结果和第二个结果。当那里有十几个结果时。 .Net 再次毫无问题地处理了这个问题。

所以我正在考虑我的语法是否正常,而问题是 BF 在网站上处理格式错误的代码。打算尝试一两个替代方案,看看是否有任何改变。

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup phantomjs


    【解决方案1】:

    结果证明代码没有问题。

    网站上的 HTML 格式错误导致 lxml 出现问题,导致无法读取结果。

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多