BeautifulSoup不会从网页中提取所有表单

时间:2017-03-27 00:39:31

标签: python html forms web-scraping beautifulsoup

我希望使用Python3和BeautifulSoup从给定的网站中提取所有表单。

这是一个执行此操作的示例,但无法获取所有表单:

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://www.qantas.com/au/en.html'
data = urlopen(url)
parser = BeautifulSoup(data, 'html.parser')
forms = parser.find_all('form')
for form in forms:
    print(form)
    print('\n\n')

如果您运行代码并访问该网址,您会注意到解析器未抓取Book a trip表单。

上述代码只会选择三种形式,而在Chrome的Developers tools > elements页面中会显示13个<form>元素。但是如果我查看页面源(Chrome中的Ctrl+U),则源只会显示BeautifulSoup抓取的三种形式。

我如何刮掉所有表格?

2 个答案:

答案 0 :(得分:1)

网页似乎使用JavaScript加载网络内容。尝试使用javascript disabled在浏览器中查看该页面。

检查您的表格是否存在。如果没有,请检查控制台中是否有任何 XHR 请求获取表单。如果没有,你应该考虑转到selenium with phantomjs 无头浏览器或放弃抓取这个网站!!

无头浏览器将允许您获取动态创建的网页的内容,并将该内容提供给BeautifulSoup。

答案 1 :(得分:1)

在phantomjs(http://phantomjs.org/download.html)和Selenium的帮助下你可以做到这一点

步骤:1。在终端或cmd上使用命令:pip install selenium 2.下载phantomjs&amp;解压缩它而不是将“phantomjs.exe”放在python路径上,例如在windows上,C:\ Python27

使用此代码,它将为您提供所需的结果:

# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup
from  selenium import webdriver


url = 'https://www.qantas.com/au/en.html'


driver = webdriver.PhantomJS()
driver.get(url)

data = driver.page_source
parser = BeautifulSoup(data, 'html.parser')


forms = parser.find_all('form')
for form in forms:
    print(form)
    print('\n\n')

driver.quit()

它将打印所有13种表格。

注意:由于字数限制无法将输出放在Answer中。