2023年5月20日 星期六

爬蟲筆記-將資訊使用josn檔匯出





目標是建立一個字典,裡面的key分別是

文章摘要,


文章連結, 

 

文章作者,

 

最後把這個字典用json檔匯出 



 



 
我們可以發現文章的摘要以及文章連結 
位於他的元素中 有class="title"屬性的div標籤底下的a標籤
ps  ppt摘要有個特性,如果文章被刪除的情況下a標籤就不存在




我們的文章作者資訊位在class="author"的div標籤中







import requests
import json
from bs4 import BeautifulSoup
import html5lib
url='https://www.ptt.cc/bbs/Gossiping/index.html'
headers={'user-agent':'myapp/0.0.1'}
#模擬使用者進入網頁
cookies={'over18':'1'}
#代入參數cookies
response=requests.get(url,headers=headers,cookies=cookies)

data=response.text
#將HTTP響應文本存放在data物件中
soup=BeautifulSoup(data,'html5lib')
#將文本以HTML5LIB的方式解析,高容錯率
article_list=[]
#之後要存放文章資訊的list
titles=soup.find_all('div',class_='title')
#文章的摘要以及連結定位在class="title"屬性的div標籤
authors=soup.select('div.author')
#文章的作者資訊在div標籤中有author屬性的元素
for title,author in zip(titles,authors):
    if title.a:
    #避免因為文章刪除導致,a標籤為None
        link='https://www.ptt.cc'+\
        title.a['href']  
    #\換行符號, title.a['href']:title的a標籤中href的屬性值
        author=author #div中有authour屬性值的標籤
        print(f'link={link}, author={author}')
    #確認元素定位 連結以及作者是否正確
       
        article={
            'title':title.text.strip(),
            'link':link,
            'author':author.text
        } #.text 只取字串部分 strip() 刪除左右字元,預設空字元
       
        article_list.append(article)
    #將每一次迴圈的字典加入到list中
print(article_list)
#將著將存放所有文章的資訊存為json檔
with open('ptt-articles.json','w',encoding='utf-8')as f:
    json.dump(article_list,f,indent=2,
              sort_keys=True,ensure_ascii=False)
   
   
    #json.dump() 將文檔轉換成json格式  ,
    #jump()、load() 函數是交互作用 在處理物件的時候使用,
    #例如檔案物件 jumps()、loads() 則是處理字串的時候使用

    #f 檔案物件
    #indent=2 設置縮進的空格數為2, 增加可讀性
    #sort_keys=True 字典的key按照字母排序
    #ensure_ascii=False 禁止用ASCII編碼

---------------------------------

[
  {
    "author": "fatslave",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684606447.A.BE4.html",
    "title": "[問卦] 去女僕咖啡店嗆她以後不會再來可以嗎"
  },
  {
    "author": "ununnihao",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684606529.A.8D6.html",
    "title": "Re: [問卦] 美國警察會怎麼應對超商浩克?"
  },
  {
    "author": "yuehsuan",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684606554.A.586.html",
    "title": "[問卦] 求婚一次被拒絕有什麼大不了的嗎"
  },
  {
    "author": "yochiya",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684606685.A.482.html",
    "title": "Re: [問卦] 八卦版似乎完全沒有一點法律常識?"
  },
  {
    "author": "GYLin",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684606726.A.DAC.html",
    "title": "[問卦] 今天警察如果也被尻到噴血"
  },
  {
    "author": "unclefucka",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607082.A.B17.html",
    "title": "Re: [問卦] 不覺得警察很聰明嗎"
  },
  {
    "author": "ciban",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607144.A.216.html",
    "title": "Re: [問卦] 美國警察會怎麼應對超商浩克?"
  },
  {
    "author": "fatslave",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607305.A.1A9.html",
    "title": "[問卦] 熱火怎麼突然就贏兩場"
  },
  {
    "author": "wahaha23",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607498.A.801.html",
    "title": "[爆卦] 22/23英超冠軍確定是曼城"
  },
  {
    "author": "killerchi",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607510.A.992.html",
    "title": "[問卦] 等他都坐下了你還揍"
  },
  {
    "author": "MeiHS",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607590.A.E78.html",
    "title": "[問卦] 蝦子有沒有去腸泥,真的吃得出差異嗎?"
  },
  {
    "author": "christopherl",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607608.A.DF4.html",
    "title": "[問卦] Dcard熱門:爸媽擔心不是處女,動手打我"
  },
  {
    "author": "wan5389",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607643.A.922.html",
    "title": "[新聞] 民進黨團釋善意暫緩再生醫療雙法 柯建銘"
  },
  {
    "author": "THEHELY",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607667.A.FE5.html",
    "title": "Re: [問卦] 八卦版似乎完全沒有一點法律常識?"
  },
  {
    "author": "metallican",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607677.A.5C1.html",
    "title": "[問卦] 比谷清十郎遇到浩克怎麼辦"
  },
  {
    "author": "gjcl6",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607734.A.EE5.html",
    "title": "[問卦] 上銬後的現行犯還可以爆打他嗎?"
  },
  {
    "author": "protoss",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684607773.A.6A6.html",
    "title": "Re: [問卦] 美國警察會怎麼應對超商浩克?"
  },
  {
    "author": "lwt501cx",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1677600392.A.D12.html",
    "title": "[公告] 八卦板板規(2023.03.01)"
  },
  {
    "author": "squall1986",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1683371005.A.2C0.html",
    "title": "[協尋] 發錢 貓咪 雲林斗六環球'嘉新6路' 賞1萬6"
  },
  {
    "author": "ubcs",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684514537.A.3CB.html",
    "title": "[公告] 第一屆八卦女神大賽 520提名預選開跑"
  },
  {
    "author": "ubcs",
    "link": "https://www.ptt.cc/bbs/Gossiping/M.1684514609.A.328.html",
    "title": "[公告] 八卦女神大賽活動置底閒聊區"
  }
]


















標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁