安裝

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 都在那裡了, 如何取出?

[爬蟲] [python] pchome 新聞,

 

 

[爬蟲] [python] pchome 新聞,

如何取出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_

 

 

 

 

 

arrow
arrow
    文章標籤
    python 爬蟲
    全站熱搜

    cianfen 發表在 痞客邦 留言(0) 人氣()