iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0
AI & Data

蟲王養成 - scrapy系列 第 6

DAY 06 : soup解析後 list取值

  • 分享至 

  • xImage
  •  

先前發文
DAY 01 : 參賽目的與規劃
DAY 02 : python3 virtualenv 建置
DAY 03 : python3 request
DAY 04 : 使用beautifulsoup4 和lxml
DAY 05 : select 和find 抓取tag
DAY 06 : soup解析後 list取值


先來介紹一下 主要目標 url : https://www.ptt.cc/bbs/hotboards.html

  • 類別
  • 文章數量
  • 類型
  • 板名

爬取的起手式 開啟瀏覽器進入要爬的網頁ctrl + shift + i 和 ctrl + shift + c 找到要爬的資料tag

但別急著開爬先觀察一下網頁的結構

你會發現要爬的資料都被包在 div class為b-ent裡 , 且其他資料都包含在a class為board裡

那知道只要拿a class就可以拿到一個板的基本資料 ,那我們就不用多抓div class為b-ent了

board_find = soup.find_all('a', class_= 'board')
board_select = soup.select('a.board')

抓到所有符合a.board條件後 , 就像取list一樣 如果只想取第2筆Baseball的資料只要

board_select[1].select('board-name')就可以抓到Baseball了

那今天主要目的是抓到全部的所以用for迴圈取得值。

for board in board_select:
    h_name = board.find('div', class_= 'board-name')
    print(h_name.text)
    h_page = board.select('span')[0]
    print(h_page.text)
    h_classname = board.select('div.board-class')[0]
    print(h_classname.text)
    h_title = board.select('div.board-title')[0]
    print(h_title.text)
    h_url = 'https://www.ptt.cc' + board['href']
    print(h_url)

抓到值後利用.text輸出tag內的值

有了板裡得url後 , 繼續使用request來抓到板內的文章 , 但由於每個板的尺度不同 , 需要進行18歲的確認

那明天的我們就要成為18歲以上嘍!

今日歌曲~
渣泥ZANI - 可是


上一篇
Day5 : select 和find 抓取tag
下一篇
DAY 07 : request_header_cookie 通過網頁18限制
系列文
蟲王養成 - scrapy30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言