Webscrape JS呈现的网站

时间:2018-06-21 13:00:35

标签: javascript python-3.x selenium web-scraping beautifulsoup

我试图弄清楚如何通过JavaScript呈现该网站https://cnx.org/search?q=subject:%22Arts%22的网站。当我查看页面源代码时,几乎没有代码。我知道BeautifulSoup无法做到这一点。我已经尝试过硒,但是我是新手。关于如何抓取此网站有什么建议吗?

3 个答案:

答案 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