これで何度も失敗したので頭がおかしいと思いましたが、理解できないhtmlで何かが起こっているのではないかと思いました。
私は cnn.com から「記事」をこすり取ろうとしています。
しかし、どの方法でsoup.find_all('articles')、またはsoup.find('body').div('div')...などを試しても、クラスタグ、idなどで失敗しました。
私はこの参照を見つけました: Webscraping from React Web application after componentDidMount。
問題が発生している理由は、html へのインジェクションだと思われます。
サイバーセキュリティの読書から「html インジェクション攻撃」以外のインジェクションについては 0 を知っています。
記事が欲しいのですが、上記の他のスタック オーバーフローの質問リンクと同様の戦術を使用する必要があると思います。私は方法がわからない。ヘルプ ドキュメントへのリンク、または具体的には cnn スクレイピングへのリンクをいただければ幸いです。
または、html body 要素の「完全なデータ」を取得する方法を誰かが知っている場合は、この定義の初期のコードで再配置を行い、body を再割り当てすることができます。
「それとも、私はばかで間違った方向に進んでいると言ってください」
def build_art_d(site):
url = site
main_l = len(url)
html = requests.get(url).text
soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())
art_dict = {}
body = soup.find('body')
print(body.prettify())
div1 = body.find('div', {'class':'pg-no-rail pg-wrapper'})
section = div1.find('section',{'id' : 'homepage1-zone-1'})
div2 = section.find('div', {'class':'l-container'})
div3 = div2.find('div', {'class':'zn__containers'})
articles = div3.find_all('article')
for art in articles:
art_dict[art.text] = art.href
#test print
for article in art_dict:
print('Article :: {}'.format(article), 'Link :: {}'.format(art_dict[article]))