完美获取python中的所有javascript文件名及其内容

Ara*_*hna 3 python beautifulsoup web-scraping

我想扫描一些网站并想获取所有 java 脚本文件名称和内容。我尝试使用 BeautifulSoup 进行 python 请求,但无法获取脚本详细信息和内容。我错过了什么吗?

我一直在尝试很多方法来寻找,但我感觉像是在黑暗中跌跌撞撞。这是我正在尝试的代码

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.marunadanmalayali.com/")
soup = BeautifulSoup(r.content)
Run Code Online (Sandbox Code Playgroud)

Kev*_*uan 5

您可以使用以下代码获取所有链接的 JavaScript 代码:

l = [i.get('src') for i in soup.find_all('script') if i.get('src')] 
Run Code Online (Sandbox Code Playgroud)
  • soup.find_all('script')返回<script>页面中所有标签的列表。

  • 一个列表理解这里使用循环遍历其返回的列表中的所有元素soup.find_all('script')

  • i是一个类似字典的对象,用于.get('src')检查它是否具有src属性。如果没有,请忽略它。否则,将其放入列表(l在示例中调用)。

在这种情况下,输出如下所示:

['http://adserver.adtech.de/addyn/3.0/1602/5506153/0/6490/ADTECH;loc=700;target=_blank;grp=[group]',
 'http://tags.expo9.exponential.com/tags/MarunadanMalayalicom/ROS/tags.js',
 'http://tags.expo9.exponential.com/tags/MarunadanMalayalicom/ROS/tags.js',
 'http://js.genieessp.com/t/057/794/a1057794.js',
 'http://ib.adnxs.com/ttj?id=5620689&cb=[CACHEBUSTER]&pubclick=[INSERT_CLICK_TAG]',
 'http://ib.adnxs.com/ttj?id=5531763',
 'http://advs.adgorithms.com/ttj?id=3279193&cb=[CACHEBUSTER]&pubclick=[INSERT_CLICK_TAG]',
 'http://xp2.zedo.com/jsc/xp2/fo.js',
 'http://www.marunadanmalayali.com/js/mnmads.js',
 'http://www.marunadanmalayali.com/js/jquery-2.1.0.min.js',
 'http://www.marunadanmalayali.com/js/jquery.hoverIntent.minified.js',
 'http://www.marunadanmalayali.com/js/jquery.dcmegamenu.1.3.3.js',
 'http://www.marunadanmalayali.com/js/jquery.cookie.js',
 'http://www.marunadanmalayali.com/js/swanalekha-ml.js',
 'http://www.marunadanmalayali.com/js/marunadan.js?r=1875',
 'http://www.marunadanmalayali.com/js/taboola_home.js',
 'http://d8.zedo.com/jsc/d8/fo.js']
Run Code Online (Sandbox Code Playgroud)

我的代码遗漏了一些链接,因为它们实际上不在 HTML 源代码中。

您可以在控制台中看到它们:

Chrome 控制台

但它们不在源代码中:

HTML 源代码

通常,这是因为这些链接是由 JavaScript 生成的。并且该requests模块不像真正的浏览器那样在页面中运行任何 JavaScript - 它只发送请求以获取 HTML 源代码。

如果您还需要它们,则必须使用另一个模块在该页面中运行 JavaScript,然后您才能看到这些链接。为此,我建议使用selenium - 它运行一个真正的浏览器,因此它可以在页面中运行 JavaScript。

例如(确保您已经为它安装了 selenium 和 web 驱动程序):

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()  # use Chrome driver for example
driver.get('http://www.marunadanmalayali.com/')

soup = BeautifulSoup(driver.page_source, "html.parser")
l = [i.get('src') for i in soup.find_all('script') if i.get('src')]

__import__('pprint').pprint(l)
Run Code Online (Sandbox Code Playgroud)