BeautifulSoup无法解析HTML网页 - javascript错误

时间:2017-10-02 13:56:26

标签: python parsing beautifulsoup

我正在尝试使用bs4和lxml解析网页。特别是我试图使用以下代码从Web of Science中提取信息:

def parse_all_authors(soup, author_name):
    pages_left = True
    articles = [] #list of articles
    while pages_left:
        articles.extend(soup.find_all('a', {"class": "smallV110"}))
        a = soup.find('a', {"class": "paginationNext", "title": "Next Page"})
        if a:
            link = a["href"]
            soup = BeautifulSoup(requests.get(link).text, "lxml")
        else:
            pages_left = False
    coauthors = {}

    for article in articles:
        link = article["href"]
        soup = BeautifulSoup(requests.get("https://apps.webofknowledge.com" + link).text, "lxml")
        add_coauthors = soup.find_all('a', {"title": "Find more records by this author"})
        for auth in add_coauthors:
            name = auth.text
            names = name.split(',')
            last_name = str(names[0].lower())
            url = auth["href"]
            if last_name not in coauthors.keys():
                coauthors[last_name] = url

我想测试是否使用以下代码正确解析了网页 e.g。

soup = BeautifulSoup(requests.get("https://apps.webofknowledge.com/Search.do?product=WOS&SID=R1hBLiuXxLjnVr3iXNn&search_mode=GeneralSearch&prID=770f4d07-ccdf-4e30-a906-a98e4b6eb455").text, "lxml")

并正确解析网页。

然而,当我用我的函数parse_all_authors调用相同的"汤"变量和我要搜索的作者的字符串,我收到以下错误: requests.exceptions.InvalidURL:无法解析:apps.webofknowledge.comjavascript:;

当我尝试查看页面源时,我找不到这个(" apps.webofknowledge.comjavascript:;")。我试图用简单的html.parser或html5lib解析同一页面,而不是" lxml"但我仍然得到同样的错误。

你可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

页面来源中的每篇文章都有href="javascript:;"class="smallV110"的链接,与您的soup.find_all('a', {"class": "smallV110"})匹配,因此已添加到articles(然后通过到requests.get)。

您可能只想选择href="/full_record.do?…"的实际链接。

这应该做:

articles.extend(soup.find_all('a', {"class": "smallV110", "href": lambda href: href.startswith("/full_record.do")}))

(或者lambda href: href != "javascript:;",如果它更适合您的需要)