安裝
pip install beautifulsoup4
pip install selenium==4.2
pip install webdriver-manager
#selenium 如果改為4.3 以後, 部分的function 已不相容, 要改function 為新的
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
import time
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(
"https://news.pchome.com.tw/today")
aout=browser.find_elements_by_class_name("news_content")
#aout=browser.find_elements_by_class_name("news_content BL") # 這樣會找不到
print(aout[1].text) # 印出所有的主要文字
本來使用整個字串含空白 +BL, 但這樣反而無法找到. 去掉空白之後會將所有的ITEMS放在 aout[0..n] 這個例子會找到 4個
link 都在那裡了, 如何取出?
如何取出hyperlink:
觀察 tag <a 出現 4次, 對的 hyperlink 出現3次, 如果只取中間, 可利用相對路徑, "//p/a" ,出現p 內部再出現a, 然後在 <a > 中有變數 "href"
可以使用 xpath 出現 "href" --> 串起來的引數 "//p/a[@href]"
aa=browser.find_elements_by_class_name("news_content")
bb=aa[0].find_elements_by_tag_name("a")
elems = aa[0].find_elements_by_xpath("//p/a[@href]")
for elem in elems:
print(elem.get_attribute("href"))
另一個方法如下--- : 但每一則會重覆 一次
def pchome():
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
import time
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get("https://news.pchome.com.tw/today")
#靠 xpath 及關鍵字, 取出, 說明: 在 "a" tag 中的keyword "data-linkdef" 內含字串 '最新_左欄_新聞列表區塊' 全部取出放在 pp list 中
pp=browser.find_elements_by_xpath("//a[contains(@data-linkdef, '最新_左欄_新聞列表區塊')]")
ii=0
for elem in pp:
# el = elem.find_elements_by_xpath("//a[@href]")
kk=elem.get_attribute("href")
print (kk)
print (elem.get_attribute("title"))
ii=ii+1
#如何切到下一頁, "模擬按鍵"
pp=browser.find_elements_by_xpath("//a[contains(text(), '下一頁')]") #找到下一頁的元素,
pp[0].click()
return elems
#call pchome() function
pchome()
#output 如下
https://news.pchome.com.tw/internation/cna/20220915/index-16632081628072218011.html
查爾斯三世搬離克萊倫斯宮 約百人面臨解僱
https://news.pchome.com.tw/internation/cna/20220915/index-16632081628072218011.html
查爾斯三世搬離克萊倫斯宮 約百人面臨解僱
https://news.pchome.com.tw/internation/cna/20220915/index-16632081001695618011.html
#其他重點:
A. find element 會有二個版本,
element :一個是return 1 個,
elements: return 一個list, 取用時用 xx[i]
.find_elements_by_
留言列表