スクレイピングのプログラム的備忘録
from bs4 import BeautifulSoup import pandas as pd
HTMLのサンプル
html = """h1要素です
h1直下のh2要素です
3000/11/11スクレイピング"""Pタグの1行目
![]()
なんとかかんとかここに書いてある
h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ
h1要素の2番めです。変則的にh2の下に入れておきます
いや、きつねが化けているんや
えー、そうなの?
内容は気にしないでください。
疲れの極致にて。リスト内包表記にif文でh1に続く要素がPだったら、タグのテキストだけをリストに追加する。
soup = BeautifulSoup(html, features="lxml") lists = [] listsselect
all_h1 = soup.select('h1') [h1要素です
,h1要素の2番めです。変則的にh2の下に入れておきます
]指定タグ以降の要素を取得
soup.h2.next_elementsイテレータが云々カンヌンにて以下。
for x in soup.h2.next_elements: print('*'*10) print(x)********** h1直下のh2要素です ********** **********3000/11/11 スクレイピング********** 3000/11/11 ********** スクレイピング ********** スクレイピング ********** スクレイピング ********** ********** ******************** **********Pタグの1行目
![]()
なんとかかんとかここに書いてある
h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ
h1要素の2番めです。変則的にh2の下に入れておきます
いや、きつねが化けているんや
えー、そうなの?
Pタグの1行目
********** Pタグの1行目 ********** ******************** **********
********** **********なんとかかんとかここに書いてある
なんとかかんとかここに書いてある
********** なんとかかんとかここに書いてある ********** ********** **********h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ
********** h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ ********** **********h1要素の2番めです。変則的にh2の下に入れておきます
********** h1要素の2番めです。変則的にh2の下に入れておきます ********** **********いや、きつねが化けているんや
********** いや、きつねが化けているんや ********** **********えー、そうなの?
********** えー、そうなの? ********** **********リスト内包表記とif
Pタグの1行目 なんとかかんとかここに書いてある いや、きつねが化けているんや えー、そうなの?要素のあるなし判定(属性)
if soup.div.has_attr('class'): else: print('pass')Class化
(素人ながら)最終的にどうまとめたかというのがこちらです。
class Tag_Search: def __init__(self): lists = ['test'] def tags_siblings(self): self.lists = [] soup = self.soup tags = soup.find_all(self.tag_target) if tags is None: pass else: #print(tags) for tag in tags: #print(tag.name,tag.text) tag_sib = tag.next_siblings #print(tag_sib,':sib') for sibling in tag_sib: #print(type(sibling)) if sibling.name == 'p': self.lists.append() #print(sibling.name,sibling.text) return self.lists要素のあるなし判定をifでやっておいて、next_siblingsでターゲット要素の直後の要素と値も取得します。
TS = Tag_Search() TS.soup = BeautifulSoup(html, features="lxml") for tag in ['h1','h2']: TS.tag_target = tag TS.tags_siblings() pd.DataFrame(TS.lists,columns=['h','content'])p いや、きつねが化けているんや p えー、そうなの? p いや、きつねが化けているんや p えー、そうなの? h content 0 h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ いや、きつねが化けているんや 1 h2:ぽんぽこどう本舗はかわいいたぬきが運営するお店だよ えー、そうなの?