Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除HTML和JavaScript_Javascript_Python_Parsing_Web Scraping_Web Crawler - Fatal编程技术网

删除HTML和JavaScript

删除HTML和JavaScript,javascript,python,parsing,web-scraping,web-crawler,Javascript,Python,Parsing,Web Scraping,Web Crawler,我正在做一个项目,在这个项目中,我需要抓取几个网站,并从中收集不同种类的信息。文本、链接、图像等信息 我正在为此使用Python。为此,我在HTML页面上尝试了BeautifulSoup,但在解析包含大量JavaScript的站点时,我被卡住了,因为这些文件的大部分信息都存储在标记中 有没有办法做到这一点?首先,从页面中删除和解析JS并不是件小事。但是,如果改用无头web客户端,它可以大大简化,就像普通浏览器一样为您解析所有内容。 唯一的区别是它的主界面不是GUI/HMI,而是API 例如,您可

我正在做一个项目,在这个项目中,我需要抓取几个网站,并从中收集不同种类的信息。文本、链接、图像等信息

我正在为此使用Python。为此,我在HTML页面上尝试了BeautifulSoup,但在解析包含大量JavaScript的站点时,我被卡住了,因为这些文件的大部分信息都存储在
标记中


有没有办法做到这一点?

首先,从页面中删除和解析JS并不是件小事。但是,如果改用无头web客户端,它可以大大简化,就像普通浏览器一样为您解析所有内容。
唯一的区别是它的主界面不是GUI/HMI,而是API

例如,您可以与支持无头模式的Chrome或Firefox一起使用


要获得更完整的无头浏览器列表,请查看。

如果页面加载中涉及大量javascript动态加载,那么事情会变得更复杂

基本上,您有3种从网站抓取数据的方法:

  • 使用浏览器开发人员工具查看页面加载中的请求。然后在爬虫程序中模拟这些请求。您可能需要和模块的帮助
  • 使用利用真实浏览器的工具,如。在这种情况下,您不关心页面是如何加载的——您将获得真实用户看到的内容。注意:您也可以使用浏览器
  • 查看网站是否提供API(例如)
再看看网页抓取框架——它也不处理AJAX调用,但这确实是我使用过的网页抓取领域中最好的工具

另请参阅以下资源:


希望对您有所帮助。

要开始使用selenium and BeautifulSoup:

使用npm(节点包管理器)安装phantomjs:

安装selenium:

pip install selenium
然后像这样获取结果页面,并像往常一样使用beautifulSoup对其进行解析:

from BeautifulSoup4 import BeautifulSoup as bs
from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)

一种非常快速的方法是遍历所有标记并获取
textContent
这是JS代码段:

page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; 
或者在selenium/python中:

import selenium
from selenium import webdriver
driver = webdriver.Chrome()

driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')

另一个ressource:顺便说一句,selenium比Ghost轻得多。我可以进行Ghost工作并加载页面,但我应该怎么做才能从中获得整个网页。文档描述了一个函数get_页面,但它甚至不在代码中。
import selenium
from selenium import webdriver
driver = webdriver.Chrome()

driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')