我正在尝试使用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"但我仍然得到同样的错误。
你可以帮帮我吗?
答案 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:;"
,如果它更适合您的需要)