iT邦幫忙

0

Python 爬蟲小白發問

  • 分享至 

  • xImage

不好意思, 我是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&amp;gl=TW&amp;ceid=TW%3Azh-Hant" target="_blank" aria-hidden="true" tabindex="-1"></a>

froce iT邦大師 1 級 ‧ 2023-08-21 15:53:38 檢舉
requests只能得到「檢視原始碼」中已有的內容,沒辦法去取得js動態產生的內容,然後google這種看似結構簡單的網頁其實做的非常安全,我也看不懂他怎麼取得內容的。

以我的功力要在這邊取內容只有selenium可以爬。
如果是要練爬蟲建議去找別的站爬。
obarisk iT邦研究生 1 級 ‧ 2023-08-22 10:19:14 檢舉
google api 付錢
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
天黑
iT邦研究生 5 級 ‧ 2023-08-21 16:20:00

py 我不熟悉
lines = sp.find_all('h4', class_='gPFEn') // 這一行應該是針對h4 tag吧

<h4 class="gPFEn" tabindex="0" role="link" jsaction="click:kkIcoc;">			中國暫停輸入台灣芒果稱檢測到有害生物| 兩岸
</h4>

我看到的h4內容只有這樣而已,沒有包含你上面你那一串tag a的內容所以抓不到

0
kennex_x
iT邦新手 4 級 ‧ 2023-08-23 14:58:58

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裡面通常是唯一值不可以重複。

我要發表回答

立即登入回答