不好意思, 我是Python小白, 我使用IDLE來寫Python, 在爬蟲 Google新聞 的時候, 標題已經可以顯示,但是無法顯示網址...
import requests
from bs4 import BeautifulSoup as BS
import googletrans
from pprint import pprint
前面是LineNotify的token設定, 就不特別放上來了
url = 'https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRFZxYUdjU0JYcG9MVlJYR2dKVVZ5Z0FQAQ?hl=zh-TW&gl=TW&ceid=TW%3Azh-Hant'
tla = googletrans.Translator()
r = requests.get(url)
sp = BS(r.text,'html5lib')
lines = sp.find_all('h4', class_='gPFEn')
s = ''
for e in lines:
title = e.get_text().strip() # 提取標題文字
link = 'https://news.google.com/' + e.get('href')[2:] #這裡遇到問題!!
s += title + '\n'
if '大稻埕' in title:
print(title)
title_en = tla.translate(title)
print(title_en.text)
print(link)
print()
lineNotifyMessage(token,title+'\n'+title_en.text+'\n'+link)
我隨便找了一則google新聞,如下。網址應該要是href後面的那串, 我認為code沒有寫錯,但是不知道為何無法提取這個屬性資料,有人可以協助嗎? 非常感謝!!
<a class="WwrzSb" jsname="hXwDdf" jslog="95014; 5:W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiaHR0cHM6Ly90dy5uZXdzLnlhaG9vLmNvbS8lRTUlQkYlQUIlRTglQTglOEEtJUU1JThDJTk3JUU1JUI4JTgyJUU2JTlBJUI0JUU5JTlCJUE4JUU0JUJFJTg2JUU3JTlBJTg0JUU3JUFBJTgxJUU3JTg0JUI2LSVFNiVCRiU5RiVFNSU4RCU5NyVFOCVCNyVBRiVFNiVCNyVCOSVFNSU4OCVCMCVFNSVCMCU4RiVFOCU4NSVCRiVFOCU4MiU5QS0wNjMwMzQ5MjYuaHRtbCJd; track:click,vis" href="./articles/CBMizQFodHRwczovL3R3Lm5ld3MueWFob28uY29tLyVFNSVCRiVBQiVFOCVBOCU4QS0lRTUlOEMlOTclRTUlQjglODIlRTYlOUElQjQlRTklOUIlQTglRTQlQkUlODYlRTclOUElODQlRTclQUElODElRTclODQlQjYtJUU2JUJGJTlGJUU1JThEJTk3JUU4JUI3JUFGJUU2JUI3JUI5JUU1JTg4JUIwJUU1JUIwJThGJUU4JTg1JUJGJUU4JTgyJTlBLTA2MzAzNDkyNi5odG1s0gHVAWh0dHBzOi8vdHcubmV3cy55YWhvby5jb20vYW1waHRtbC8lRTUlQkYlQUIlRTglQTglOEEtJUU1JThDJTk3JUU1JUI4JTgyJUU2JTlBJUI0JUU5JTlCJUE4JUU0JUJFJTg2JUU3JTlBJTg0JUU3JUFBJTgxJUU3JTg0JUI2LSVFNiVCRiU5RiVFNSU4RCU5NyVFOCVCNyVBRiVFNiVCNyVCOSVFNSU4OCVCMCVFNSVCMCU4RiVFOCU4NSVCRiVFOCU4MiU5QS0wNjMwMzQ5MjYuaHRtbA?hl=zh-TW&gl=TW&ceid=TW%3Azh-Hant" target="_blank" aria-hidden="true" tabindex="-1"></a>
py 我不熟悉
lines = sp.find_all('h4', class_='gPFEn') // 這一行應該是針對h4 tag吧
<h4 class="gPFEn" tabindex="0" role="link" jsaction="click:kkIcoc;"> 中國暫停輸入台灣芒果稱檢測到有害生物| 兩岸
</h4>
我看到的h4內容只有這樣而已,沒有包含你上面你那一串tag a的內容所以抓不到
Dears,
以下針對你的Code進行一些修改(測試正常)
Code:
import requests
from bs4 import BeautifulSoup as BS
import googletrans
from pprint import pprint
url = 'https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRFZxYUdjU0JYcG9MVlJYR2dKVVZ5Z0FQAQ?hl=zh-TW&gl=TW&ceid=TW%3Azh-Hant'
tla = googletrans.Translator()
html = requests.get(url)
html = BS(html.text,'html5lib')
html = html.find_all("c-wiz", jsrenderer="ARwRbe")
s = ''
for i in range(len(html)):
url = html[i].find('a', class_='WwrzSb').get("href")
title = html[i].find('h4').text
link = 'https://news.google.com/' + url[2:]
s += title + '\n'
if '大稻埕' in title:
print(title)
title_en = tla.translate(title)
print(title_en.text)
print(link)
print()
lineNotifyMessage(token,title+'\n'+title_en.text+'\n'+link)
你自己Code找的是<h4>
標籤,標籤內並沒有href=
所以你怎麼找都會報錯,
所以建議你在爬蟲的時候要先知道HTML的標籤是有階層式的關係,如果像你原本的寫法<a><h4>
兩個標籤其實都是在同一個階層是會找不到你要的結果,所以你應該要先找他們兩個標籤的父標籤,在個別找你要的值。
P.S.如果標籤內有id=
建議用id
去找,因為id
在HTML裡面通常是唯一值不可以重複。