こんにちは。いま、Python、スクレイピング、クローラの勉強のために、i〇〇〇ページをスクレイピングしようと試みています。
使用しているpythonは3.5、BeautifulSoupは4を使っています。
対象のwebサイトは1ページの中に、
店舗名 住所 電話番号
といった形のブロックが多数あります。
同じような感じで、店舗名,住所,電話番号という順番で、ページ内のすべてをcsvに出力したいと思っています。
したいこと:
電話番号がないブロックがまれにあるため、そのままだと次のブロックの電話番号が詰められてしまいますよね?なので、ないところは半角ハイフンを入れたいです。
備考:
住所は全て〒から始まるので、textの指定で引っこ抜いています。
下記のHTMLのarticleタグが一つのブロックで、1ページに50ブロックあります。
html
1<body> 2 <div> 3 4 <article> 5 <section> 6 <h4><a href="URL">店舗名</a></h4> 7 <p><span>~</span>住所<a>~</a></p> 8 <p><span>~</span><a>~</a><b>電話番号</b></p> 9 <p>~</p> 10 </section> 11 </article> 12 13 </div> 14</body>
sectionタグ内のpタグの数はブロックによって変わります。
(URLの記載がある場合はpタグが一つ増えます。電話番号がないブロックは、pタグが一つ減ります。)
現状:
Python
1from urllib.request import urlopen 2from bs4 import BeautifulSoup 3import re 4 5html = urlopen("URL") 6bsObj = BeautifulSoup(html,"html.parser") 7 8titles = bsObj.body.find_all("h4",{"class":"clearfix"}) 9adrss = bsObj.body.find_all(text=re.compile("〒")) 10numbs = bsObj.body.find_all("b") 11 12 13for (title,adrs,numb) in zip(titles,adrss,numbs): 14 print(title.get_text()) 15 print(adrs) 16 print(numb.get_text())
Python初心者の上、BeautifulSoupの使い方もよくわからないです・・・
find_allを二階つづけてつかうことはできないのでしょうか・・・
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/02 16:46