在浏览器中使用 CSS 选择器从包含 HTML 标记的字符串中抓取数据,而不创建 DOM 元素?

Scraping data from a string containing HTML markup, in the browser, using CSS selectors and without creating the DOM elements?

我已经尝试这个简单的任务好几个小时了。似乎没有可用的库可以提供帮助,这里也没有问题似乎可以解决这种情况。

这很简单:

在 JAVA 中,我已经能够使用 JSoup 做到这一点。但是在浏览器上似乎没有 JS 运行 的等效库。

感谢您的宝贵时间。

@JaromandaX 的建议是正确的。一种方法是使用 DOMParser 对象。它允许您创建元素,然后在它们上使用 .querySelector.querySelectorAll,同时 不加载任何外部资源或 运行 任何脚本 .

这对我有用:

var parser = new DOMParser();
var doc = parser.parseFromString(markup, "text/html");

您可以使用 PHP Goutte or Python's BeautifulSoup4 库,您也可以在其中使用 CSS SelectorsXPaths,无论您喜欢什么。

这里有一些简单的入门示例。

PHP古特:

require_once 'vendor/autoload.php';
use Goutte\Client;

$client = new Client();
$resp = $client->request('GET', $url);
foreach ($resp->filter(' your css selector here') as $li) {
// your logic here
}

Python BeautifulSoup 示例:

import requests
from bs4 import BeautifulSoup
timeout_time = 30;

def tryAgain(passed_url):
    try:
        page  = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
        return page
    except Exception:
        while 1:

            print("Trying again the URL:")
            print(passed_url)
            try:
                page  = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text
                print("-------------------------------------")
                print("---- URL was successfully scraped ---")
                print("-------------------------------------")
                return page
            except Exception:
                time.sleep(20)
                continue

header = [{"User-Agent": "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"},
{"User-Agent":"Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14"},
{"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201"},
{"User-Agent":"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"}]

main_url = " your URL here "

main_page_html  = tryAgain(main_url)
main_page_soup = BeautifulSoup(main_page_html, "html.parser")

for a in main_page_soup.select(' css selector here '):
        print a.select(' your css selector here ')[0].text