スクレイピングをするのであれば、HTML や CSS などで Web がどのように構成されているのかを理解していることが前提です。
HTML/CSS クイックリファレンス
HTML は機械が読みやすい形式になっているわけではないので、いろいろと泥臭い処理を記述してあげる必要があります。
サンプルコード
python
1import numpy as np
2import requests
3from bs4 import BeautifulSoup
4
5res = requests.get('https://ja.wikipedia.org/wiki/日本名城百選')
6soup = BeautifulSoup(res.text.replace('\n', ''))
7
8from urllib.parse import urlparse, urljoin
9
10data = []
11for tr in soup.select('table tr'):
12 if all(x.name == 'th' for x in tr):
13 continue # ヘッダーはスキップする。
14 cells = tr.contents # tr の子要素一覧
15
16 if not cells[0].text:
17 continue # 右下の「ウィキメディア・コモンズには、~」は無視
18
19 no = cells[0].text
20 name = cells[1].text
21
22 # URL はクエリを消して、絶対パスにする。
23 url = urlparse(cells[1].a['href'])
24 link = urljoin('https://ja.wikipedia.org/', url.netloc + url.path)
25
26 data.append([no, name, link])
27
28from pprint import pprint
29pprint(data, width=300)
txt
1[('11', '五稜郭', 'https://ja.wikipedia.org/wiki/%E4%BA%94%E7%A8%9C%E9%83%AD'),
2 ('12', '松前城', 'https://ja.wikipedia.org/wiki/%E6%9D%BE%E5%89%8D%E5%9F%8E'),
3 ('13', '勝山館', 'https://ja.wikipedia.org/wiki/%E5%8B%9D%E5%B1%B1%E9%A4%A8'),
4 ('14', '弘前城', 'https://ja.wikipedia.org/wiki/%E5%BC%98%E5%89%8D%E5%9F%8E'),
5 ('15', '七戸城', 'https://ja.wikipedia.org/wiki/%E4%B8%83%E6%88%B8%E5%9F%8E'),
6 ('16', '盛岡城', 'https://ja.wikipedia.org/wiki/%E7%9B%9B%E5%B2%A1%E5%9F%8E'),
7 ('17', '九戸城', 'https://ja.wikipedia.org/wiki/%E4%B9%9D%E6%88%B8%E5%9F%8E'),
8 ('18', '久保田城', 'https://ja.wikipedia.org/wiki/%E4%B9%85%E4%BF%9D%E7%94%B0%E5%9F%8E'),
9 ('19', '檜山城', 'https://ja.wikipedia.org/wiki/%E6%AA%9C%E5%B1%B1%E5%AE%89%E6%9D%B1%E6%B0%8F%E5%9F%8E%E9%A4%A8%E8%B7%A1'),
10 ('20', '仙台城', 'https://ja.wikipedia.org/wiki/%E4%BB%99%E5%8F%B0%E5%9F%8E'),
リストでNo, 名前、リンクが取れています。
これを excel に保存することはまた別問題ですので、今回は省略します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/28 02:56