前提・実現したいこと
・指定したURLの該当箇所をテキストで抽出し、結果をエクセルもしくはcsvファイルに格納したいです。
Pythonのbeautifulsoupパッケージでアマゾンの商品画面から、
書籍名、著者名、発行年、出版社、ISBNを抽出しようとしていたのですが、出版社とISBNが記載されている部分がうまく抽出できませんでした。
cssセレクタ(#detail_bullets_id > table > tbody > tr > td > div > ul > li:nth-child(2))をコピーし、
soup.find_all("#detail_bullets_id > table > tbody > tr > td > div > ul > li:nth-child(2)")
と指定しても、[]しか返って来ませんでした。
クラス名で絞り込もうと
soup.find_all(class_="contnt")を試すといらない部分が返ってきて、
soup.find_all(class_="contnt","ul")のように複数要素で絞り込もうとすると[]となってしまいます。
classやulを複数条件で絞り込み、テキストとして該当部分のみ抽出する方法はありますでしょうか?
html、css、Python 初心者で、いろいろと勘違い等あるかと思いますが、
アドバイスいただければ幸いです。
発生している問題・エラーメッセージ
print(soup.find_all('ul', {"class":"content"}))
に対して、[]が返る
該当のソースコード
Python3.7
1import requests 2import re 3import bs4 4import pandas as pd 5headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0", 6 "Accept-Encoding":"gzip, deflate", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 7 "DNT":"1","Connection":"close", "Upgrade-Insecure-Requests":"1"} 8 9url="https://www.amazon.co.jp/gp/product/4791768477" 10html=requsts.get(url,headers=headers) 11soup=bs4.BeautifulSoup(html.content,features="lxml") 12title=soup.h1.select("#productTitle") 13author=soup.find_all(class_={'author notFaded'}) 14date=soup.find_all(class_="a-size-medium a-color-secondary a-text-normal") 15price=soup.find_all(class_={"a-button-text",",class_=a-color-base"},href="javascript:void(0)",role="button") 16items = soup.find_all('div', {"id":"detail_bullets_id"}) 17 18ret = [] 19title = [t.text for t in title] 20author = [t.text for t in author] 21price = [t.text for t in price] 22info = [] 23for ul_tag in items: 24 for li in ul_tag.find_all('td', {"class":"bucket"}): 25 info.append(li.text) 26 if(li==2): 27 break 28print_list=[title,author,price,info] 29print(print_list)
試したこと
該当部分より上のレベル?('div', {"id":"detail_bullets_id"})で絞り込みをかけ、余計な部分が入りつつも欲しい情報を格納することはできました。
が、余計な部分が大きすぎるので、printで出力を調整するか、そもそもきちんと狙いの個所を抜き取る方法がわかればと思案しております。
補足情報(FW/ツールのバージョンなど)
Windows subsystem for LynuxでUbuntu.18.04から、Jupterlabを起動して行っています。
ちなみに、PythonにおいてRStudioのようなコードを行ずつ実行・確認ができるプラットフォームはあるのでしょうか?
また、前段階についての初歩的な質問として、"text.txt"にURLが複数格納されているのですが、Windowsの例えばデスクトップ上の"folder"フォルダにtxtファイルがある場合、
with open("C:/Users/~~/Desktop/folder/text.txt") as f:
lines = f.read().splitlines()
このコードではファイルが見つからないとエラーが返り、現在のディレクトリにtext.txtをコピーすると、Permission deniedのエラーになり、外部ファイルの読み込みがうまくいきません。こちらについてもアドバイスいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー