我试图弄清楚如何通过JavaScript呈现该网站https://cnx.org/search?q=subject:%22Arts%22的网站。当我查看页面源代码时,几乎没有代码。我知道BeautifulSoup无法做到这一点。我已经尝试过硒,但是我是新手。关于如何抓取此网站有什么建议吗?
答案 0 :(得分:1)
您可以使用硒来做到这一点。不过,您不会看HTML源代码。在Chrome上按F12键(或在firefox上安装firebug)以进入开发人员工具。在那里,您可以选择元素(“开发工具”窗口左上方的指针图标)。单击所需内容后,可以右键单击“元素”列中突出显示的部分,然后复制-> Xpath。请小心在代码中使用正确的引号,因为xpath通常使用双引号,这在使用find_element_by_expath方法时也很常见。
基本上,您实例化您的浏览器,转到页面,通过xpath查找元素(一种XML语言,该XML语言仅转到使用javascript的页面上的特定位置)。大概是这样的:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, socialArrayPhrases);
socialPhrases.setAdapter(arrayAdapter);
socialPhrases.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position_of_phrase, long ld) {
Toast.makeText(getApplicationContext(),socialArrayPhrases.get(position_of_phrase) ,Toast.LENGTH_SHORT).show();
if(position_of_phrase == 0)
{
mediaPlayer = MediaPlayer.create(this, R.raw.test_audio);
-----------------------------------------------------------
}
}
});
硒可用于大量刮削,找到信息后,您只需要知道要做什么即可。
答案 1 :(得分:1)
您可以使用该API直接从网页获取其数据(使用JavaScript)。 https://archive.cnx.org/search?q=subject:%22Arts%22它返回JSON,因此您只需要解析JSON。
import requests
import json
url = "https://archive.cnx.org/search?q=subject:%22Arts%22"
r = requests.get(url)
j = r.json()
# Print the json object
print (json.dumps(j, indent=4, sort_keys=True))
# Or print specific values
for i in j['results']['items']:
print (i['title'])
print(i['summarySnippet'])
答案 2 :(得分:0)
尝试使用Chrome的Google官方无头浏览器包装puppeteer。
安装:
npm i puppeteer
用法:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
易于使用并且拥有good documentation。