【问题标题】:Web scraping for divs inserted by scripts对脚本插入的 div 进行网页抓取
【发布时间】:2017-04-20 01:47:36
【问题描述】:

抱歉,这是一个愚蠢的问题。

我正在尝试在 python 中使用 Beautifulsoup 和 urllib2 来查看 url 并提取具有特定类的所有 div。但是,即使我在 chrome 的开发人员工具中“检查元素”时可以看到 div,结果也始终为空。

我查看了页面源代码,这些 div 不存在,这意味着它们是由脚本插入的。所以我的问题是如何使用 Beautifulsoup 查找那些 div(使用他们的类名)?我想最终阅读并关注这些 div 下的 href。

谢谢。

[编辑] 我目前正在查看 H&M 网站:http://www.hm.com/sg/products/ladies,我有兴趣获取所有具有类 'product-list-item'

的 div

【问题讨论】:

  • 你可以发布你尝试抓取的网址以检查它是否使用javascript

标签: python python-2.7 beautifulsoup urllib2 urllib


【解决方案1】:

试试这个:

from bs4 import BeautifulSoup
import urllib2
page = urllib2.urlopen("http://www.hm.com/sg/products/ladies")

soup = BeautifulSoup(page.read(),'lxml')

scrapdiv = open('scrapdiv.txt','w')

product_lists = soup.findAll("div",{"class":"o-product-list"})
print product_lists
for product_list in product_lists:
    print product_list
    scrapdiv.write(str(product_list))
    scrapdiv.write("\n\n")
scrapdiv.close()

【讨论】:

    【解决方案2】:

    您从该特定网址一无所获的原因仅仅是因为,您需要的信息不存在

    首先让我解释一下该页面是如何在浏览器中加载的:当您请求该页面时(http://www.hm.com/sg/products/ladies),文字内容将在第一阶段返回(这就是您得到的从您的 urllib2 请求),然后浏览器开始读取/解析内容,基本上它告诉浏览器在哪里可以找到呈现整个页面所需的所有信息(例如 CSS 来控制布局,附加 javascript/urls/pages 来填充某些区域等),并且浏览器会执行所有幕后操作。当您在 chrome 中“检查元素”时,页面已经完全加载,并且您想要的那些信息不在原始 url 中,因此您需要找出用于填充这些区域的 url 并改为使用该特定 url。

    所以现在我们需要找出幕后发生的事情,并且需要一个工具来捕获该页面加载时的所有流量(我推荐fiddler)。

    如您所见,当您在浏览器中打开该页面时会发生很多事情!(这只是整个页面加载过程的一部分)因此,根据有根据的猜测,您需要的那些信息应该在这三个之一中"api.hm.com" 请求,最好的部分是它们已经是 JSON 格式的,这意味着你甚至可以不用 BeautifulSoup,内置的 json 模块可以完成这项工作!

    好的,现在呢?使用urllib2 模拟这些请求并得到你想要的。

    附: requests 是这种工作的好工具,你可以得到它here

    【讨论】:

      【解决方案3】:

      查看此链接enter link description here

      您可以通过更改 url 来获取所有信息,此链接可以在 chrome dev tools > Network 中找到

      【讨论】:

        【解决方案4】:

        尝试使用 selenium 运行 javascript

        from selenium import webdriver
        
        driver = webdriver.Firefox()
        driver.get("http://www.python.org")
        html = driver.page_source
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多