2017-10-02 17 views
0

bs4とlxmlを使用してWebページを解析しようとしています。BeautifulSoupがHTML Webページを解析できません - javascriptエラー

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 

私は、Webページが解析されている場合、正しく 例えば、次のコードを使用してテストしたい:特に、私は、次のコードを使用してWeb of Scienceのから情報を抽出しようとしています

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

あり、あなたのsoup.find_all('a', {"class": "smallV110"})にマッチしたページのソース内の各記事のhref="javascript:;"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:;"、それはもっと自分のニーズに合っている場合は)

+0

はあなたの助けのためにありがとうございました!私はそれを働かせることができた! :) – anasvaf

関連する問題