2017-11-02 13 views
0

Pythonで(BeautifulSoup4を使用して)簡単なクロールを行っていますが、HTMLエンティティを含むタグの取得に問題があります。BeautifulSoupでのHTMLエンティティの使用

これは、小さな例(本物のURLを削除)

start_url = "..." 
next_chapter_bad = "Next Chapter ]>" 
next_chapter_good = "Next Chapter ]>" 

""" 
<td class="comic_navi_right"> 
    <a href="..." class="navi navi-next-chap" title="Next Chapter ]&gt;">Next Chapter ]&gt;</a> 
    <a href="..." class="navi comic-nav-next navi-next" title="Next Page &gt;">Next Page &gt;</a> 
    <a href="..." class="navi navi-last" title="Most Recent Page &gt;&gt;">Most Recent Page &gt;&gt;</a> 
</td> 
""" 
page = requests.get(start_url) 
if page.status_code != requests.codes.ok: 
    return '' 

soup = BeautifulSoup(page.text) 
# get the url for the "Next chapter" link 
next_link = soup.find('a', href=True, string=next_chapter_bad) 
print(next_link) 
next_link = soup.find('a', href=True, string=next_chapter_good) 
print(next_link) 

で出力は次のとおりです。

None 
<a class="navi navi-next-chap" href="..." title="Next Chapter ]&gt;">Next Chapter ]&gt;</a> 

(検索をする方法はありますが)HTMLエンティティで動作しますか?

答えて

1

unescape HTML(https://stackoverflow.com/a/2087433/4183498)は、&gt;がエスケープ>であるためです。

from HTMLParser import HTMLParser 

... 

soup = BeautifulSoup(page.text, 'html.parser') 
# get the url for the "Next chapter" link 
html_parser = HTMLParser() 
next_link = soup.find('a', href=True, string=html_parser.unescape(next_chapter_bad)) 
print(next_link) 
関連する問題