2017-06-16 63 views
1

我有一个闪存卡制作程序,用于从这里获取信息的西班牙语:http://www.spanishdict.com/examples/zorro(这只是一个示例)。我已经设置好了,所以它的翻译很好,但现在我想添加示例。不过,我注意到,该页面上的示例是动态生成的,所以我安装了Beautiful Soup和HTML5解析器。我对特别感兴趣的标签是:Python - 使用DOM获取HTML

<span class="megaexamples-pair-part">Los perros siguieron el rastro del <span 
class="megaexamples-highlight">zorro</span>. </span> 

我使用的尝试和检索它的代码是:

soup = BeautifulSoup(urlopen("http://www.spanishdict.com/examples/zorro").read(), 'html5lib') 
example = soup.findAll("span", {"class": "megaexamples-pair-part"}) 

但是,不管什么办法,我摆动它,我可以” t似乎让它拉下动态生成的代码。我已经确认我通过搜索megaexamples-container来获取页面,这很好(你可以通过右键单击google chrome并点击查看页面源代码来查看)。

任何想法?

+0

内容可以由JavaScript加载后产生:

现在你可以用类似解析它。 [检查这个答案。](https://stackoverflow.com/questions/13960567/reading-dynamically-generated-web-pages-using-python) –

回答

0

我用佩德罗的答案让我朝着正确的方向前进。这是我做过什么来得到它的工作:

  1. 下载硒PIP安装硒
  2. 下载的驱动程序要仿真浏览器。你可以从this page下载它们。驱动程序必须位于PATH变量中,否则您需要在webdriver的构造函数中指定路径。
  3. 进口硒硒进口的webdriver
  4. 现在使用下面的代码:
browser = webdriver.Chrome() 
browser.get(raw_input("Enter URL: ")) 
html_source = browser.page_source 

注意:如果你没有把你的驱动程序路径,你必须调用构造函数与浏览器= webdriver.Chrome(<PATH_TO_DRIVER_HERE>)

注2:您可以使用类似webdriver.Firefox ()如果你想要一个不同的浏览器。汤= BeautifulSoup(html_source, 'html5lib')

1

你在做什么只是拉HTML页面,它可能通过JavaScript调用从服务器加载更多的数据。

你有2种选择:

  • 使用的webdriver如selenium来控制正确加载整个页面网页浏览器(然后你可以用BeautifulSoup解析它或找到selenium自己的工具元素)。由于浏览器的使用,这会导致一些开销。

  • 使用浏览器的开发人员工具(通常通过F12访问)的网络选项卡分析来自动态加载的传入和传出请求,并使用requests模块复制它们。这样更高效,但也可能更棘手。

请记住,只有当您拥有网站所有者的许可时才会这样做。在许多情况下,它违背了ToS。