前提・実現したいこと
Pythonを使ってlxmlでwebスクレイピングをしています。
Python初心者です。
スクレイピングしたいWebページのタグの中身に応じて、スクレイピングをしたいと思っています。
例えば
<td class="heading"> 寸法 </td> <td class="yahooHighlightSearch spec"> 幅1600×奥行600×高さ700mm、引出し内形センタートレー・幅:758mm、奥行:382mm、高さ:42mm、サイドトレー・幅:322mm、奥行:382mm、高さ:42mm </td>
タグの中に『寸法』と書いている次のタグの中身を『幅1600×奥行600×高さ700mm、引出し内形センタートレー・幅:758mm、奥行:382mm、高さ:42mm、サイドトレー・幅:322mm、奥行:382mm、高さ:42mm 』を取得するcssselectみたいな指定する方法が知りたいです。
初心者であまり詳しくないのですが、オススメの方法がありましたら教えていただけると幸いです。
発生している問題・エラーメッセージ
取得先のHTMLソース
<tr> <th rowspan="9" mt:id="ATTR_ITEM_COL">商品仕様</th> <td class="heading"> 寸法 </td> <td class="yahooHighlightSearch spec"> 幅1600×奥行600×高さ700mm、引出し内形センタートレー・幅:758mm、奥行:382mm、高さ:42mm、サイドトレー・幅:322mm、奥行:382mm、高さ:42mm </td> <td class="heading"> カラー </td> <td class="yahooHighlightSearch spec"> メープル/ホワイト </td> </tr> <tr> <td class="heading"> 奥行 </td> <td class="yahooHighlightSearch spec"> 600 mm </td> <td class="heading"> 高さ </td> <td class="yahooHighlightSearch spec"> 700 mm </td> </tr>
該当のソースコード
作りかけのPythonです。
import re import requests import lxml.html def main(): session = requests.Session() response = session.get('https://www.askul.co.jp/m/07-0706-0702001/') urls = scrape_list_page(response) for url in urls: response = session.get(url) desk = scrape_detail_page(response) print(desk) break def scrape_list_page(response): root = lxml.html.fromstring(response.content) root.make_links_absolute(response.url) for a in root.cssselect('.listSetIn a[class="link"]'): url = a.get('href') yield url def scrape_detail_page(response): root = lxml.html.fromstring(response.content) desk = { 'url' : response.url, **'size' : root.cssselect('[class="yahooHighlightSearch spec"]')[0].text_content(),** } return desk if __name__ == '__main__': main()
cssselectだと同じ名前のものがあるため取得できません。
試したこと
『幅1600×奥行600×高さ700mm、引出し内形センタートレー・幅:758mm、奥行:382mm、高さ:42mm、サイドトレー・幅:322mm、奥行:382mm、高さ:42mm』、『メープル/ホワイト』、『600』、『700』の情報を取得したいのですが、cssselectで取得しようとするとclassタグの名前が同じなので取得することができません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー