python初心者です。
Webスクレイピングでサイトの3つの部分(記事タイトル・日時&ソース・記事内容)を抽出したいのですが、以下のエラーメッセージが発生しました。
発生しているエラーメッセージ
①
line 42, in <module> scrapy(NEWS_URL)
②
line 20, in scrapy parse(page)
③
line 33, in parse title = news_h[0].text
④
line 1486, in __getitem__ return self.attrs[key] KeyError: 0
該当のソースコード
①
if __name__ == '__main__': scrapy(NEWS_URL)
②
def scrapy(url): page_name = url.split('/')[-1] url_request = request.urlopen(url) if url_request.status != 200: print("Error!") else: page = url_request.read().decode('utf8', 'ignore') with open(SAVE_PATH + page_name, "w", encoding="utf8") as f: f.write(page) parse(page)
③
def parse(page): soup = BeautifulSoup(page, "html.parser", from_encoding='utf8') news_div = soup.find('div', class_='content') news_h = news_div.find('h1') news_p = news_div.find_all('p', class_='left_zw') for div in news_div: news_a = news_div.find_all('a') if news_a: title = news_h[0].text source = div.find('div', class_='left-t').text text = news_p.find('div', class_='left_zw').text print(title, source, text)
試したこと
print(news_h)で抽出された結果を確認するもうまくいかず......
④は該当ソースも分からない状態です。
補足情報
スクレイピング該当Webページ
http://www.chinanews.com/gn/2021/10-10/9582799.shtml
自分で打ち込んだコード全体
import urllib.request as request import os from bs4 import BeautifulSoup SAVE_PATH = 'data/' if not os.path.exists(SAVE_PATH): os.mkdir(SAVE_PATH) NEWS_URL = 'http://www.chinanews.com/gn/2021/10-10/9582799.shtml' def scrapy(url): page_name = url.split('/')[-1] url_request = request.urlopen(url) if url_request.status != 200: print("Error!") else: page = url_request.read().decode('utf8', 'ignore') with open(SAVE_PATH + page_name, "w", encoding="utf8") as f: f.write(page) parse(page) def parse(page): soup = BeautifulSoup(page, "html.parser", from_encoding='utf8') news_div = soup.find('div', class_='content') news_h = news_div.find('h1') news_p = news_div.find_all('p', class_='left_zw') for div in news_div: news_a = news_div.find_all('a') if news_a: title = news_h[0].text source = div.find('div', class_='left-t').text text = news_p.find('p', class_='left_zw').text print(title, source, text) if __name__ == '__main__': scrapy(NEWS_URL)
あなたの回答
tips
プレビュー