回答編集履歴

7 参考情報を追加

umyu

umyu score 5687

2018/06/10 23:32  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が列:人気を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
---
218/06/10追記
```Python
# -*- coding: utf-8 -*-
from itertools import filterfalse
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   print('#' * 60)
   for tr in soup.select("table.race_table_01 > tr.bml1"):
       for rank in filterfalse(lambda x: x.renderContents().decode() != "1", tr.select("td:nth-of-type(1)")):
           for popular in tr.select("td:nth-of-type(12)"):
               print(popular.renderContents().decode())
               break
       # filterfalseは以下の行と同じです
       #for rank in tr.select("td:nth-of-type(1)"):
       #   if rank.renderContents().decode() != "1":
       #       continue
       #   for popular in tr.select("td:nth-of-type(12)"):
       #      print(popular.renderContents().decode())
       #       break
if __name__ == '__main__':
   main()
```
◇参考情報
0. [itertools.filterfalse](https://docs.python.jp/3/library/itertools.html#itertools.filterfalse)
0. [Pythonスクレイピング:同じ名前のクラス内での識別](https://teratail.com/questions/120415)
0. [Pythonスクレイピング:同じ名前のクラス内での識別](https://teratail.com/questions/120415)
0. [:nth-of-type()](https://developer.mozilla.org/ja/docs/Web/CSS/:nth-of-type)
6 追記

umyu

umyu score 5687

2018/06/10 22:55  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が列:人気を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
---
218/06/10追記
```Python
# -*- coding: utf-8 -*-
from itertools import filterfalse
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   print('#' * 60)
   for tr in soup.select("table.race_table_01 > tr.bml1"):
       for rank in filterfalse(lambda x: x.renderContents().decode() != "1", tr.select("td:nth-of-type(1)")):
           for popular in tr.select("td:nth-of-type(12)"):
               print(popular.renderContents().decode())
               break
       # filterfalseは以下の行と同じです
       #for rank in tr.select("td:nth-of-type(1)"):
       #   if rank.renderContents().decode() != "1":
       #       continue
       #   for popular in tr.select("td:nth-of-type(12)"):
       #      print(popular.renderContents().decode())
       #       break
if __name__ == '__main__':
   main()
```
◇参考情報
[itertools.filterfalse](https://docs.python.jp/3/library/itertools.html#itertools.filterfalse)
0. [itertools.filterfalse](https://docs.python.jp/3/library/itertools.html#itertools.filterfalse)
0. [Pythonスクレイピング:同じ名前のクラス内での識別](https://teratail.com/questions/120415)
5 追記

umyu

umyu score 5687

2018/06/10 22:53  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が列:人気を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
---
218/06/10追記
```Python
# -*- coding: utf-8 -*-
from itertools import filterfalse
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   print('#' * 60)
   for tr in soup.select("table.race_table_01 > tr.bml1"):
       for rank in filterfalse(lambda x: x.renderContents().decode() != "1", tr.select("td:nth-of-type(1)")):
           for popular in tr.select("td:nth-of-type(12)"):
               print(popular.renderContents().decode())
               break
       # filterfalseは以下の行と同じです
       #for rank in tr.select("td:nth-of-type(1)"):
       #   if rank.renderContents().decode() != "1":
       #       continue
       #   for popular in tr.select("td:nth-of-type(12)"):
       #      print(popular.renderContents().decode())
       #       break
if __name__ == '__main__':
   main()
```
◇参考情報
[itertools.filterfalse](https://docs.python.jp/3/library/itertools.html#itertools.filterfalse)
4 追記

umyu

umyu score 5687

2018/06/10 21:35  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が色情報を取得するコードになっていますが・・・
クラス指定が列:人気を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
3 追記

umyu

umyu score 5687

2018/06/10 21:32  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が色情報を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01 nk_tb_common'):
   for table in soup.find_all('table', class_='race_table_01'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
2 追記

umyu

umyu score 5687

2018/06/10 21:30  投稿

> market = soup.find('td', class_='cellcolor_1')
クラス指定が色情報を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01 nk_tb_common'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```
```
◇参考情報
[[netkeiba] の検索結果](https://teratail.com/questions/search?q=netkeiba&conditions=and)
1 追記

umyu

umyu score 5687

2018/06/10 21:29  投稿

> market = soup.find('td', class_='cellcolor_1')
 
クラス指定が色情報を取得するコードになっていますが・・・
◇スクレイピングの基本。
**取得したい要素の上位のタグから下に手繰っていく。**
HTMLのセレクタ指定と発想は同じです。
```Python
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
def main() -> None:
   # 指定するURL
   URL = "http://race.netkeiba.com/?pid=payback_list&id=p2018050301"
   html = urlopen(URL)
   soup = BeautifulSoup(html, "html.parser")
   print(soup)
   for table in soup.find_all('table', class_='race_table_01 nk_tb_common'):
       for val in table.find_all('td', class_='txt_r'):
           print(val.text)
           break
if __name__ == '__main__':
   main()
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る