python大數據特訓CH2 |
|
孫
更新時間:2021/9/20 下午 11:45:15 |
|
import requests url = 'https://irs.thsrc.com.tw/IMINT/' # 自訂表頭 headers={ 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36' } # 將自訂表頭加入 GET 請求中 html = requests.get(url, headers=headers) print(html)
書本範例的會卡住是甚麼原因 不是已經自訂headers了嗎 |
|
|
|
孫
更新時間:2021/9/21 上午 12:26:50 |
|
import requests from bs4 import BeautifulSoup url = 'http://ehappy.tw/bsdemo1.htm' html = requests.get(url) html.encoding = 'UTF-8' sp = BeautifulSoup(html.text, 'lxml')
print(sp.title) print(sp.title.text) print(sp.h1) print(sp.p)
也是跑不動(頁數2-122-12) |
|
|
|
孫
更新時間:2021/9/21 上午 12:29:51 |
|
import requests url = 'https://www.ptt.cc/bbs/Gossiping/index.html' # 設定cookies的值 cookies = {'over18':'1'} r = requests.get(url, cookies=cookies) print(r.text)
以及這段要怎摸把這個程式碼加入PTT的cookie好能跳過18歲認證的頁面(頁數2-9) |
|
|
|
文淵閣工作室
更新時間:2021/9/22 上午 10:10:59 |
|
1. 高鐵的網站已經改版,我們再視狀況調整程式,如果有結果再分享。
2. 這個基礎範例的網址DNS在更新,應該很快就會好了,您再試看看。
3. PTT這個範例,根據您貼的程式碼就可以跳過認證了,可以爬到版上的資訊沒有問題,請問您要詢問的重點是? |
|
|
|
文淵閣工作室
更新時間:2021/9/22 上午 10:28:42 |
|
一、 headers={ 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36' }
Chrome/64.0.3282.186 中的 64.0.3282.186 必須是自已使用的Chrome 版本。 請查詢您使用的 Chrome 版本,例如:我使用的是 Chrome/93.0.4577.82
二、 <bs1.py> 因工作室網頁重整,現已修復可正常執行。
三、下列程式已設定 cookies = {'over18':'1'} 可跳過18歲認證的頁面,所以我不是很了解您的問題。 import requests url = 'https://www.ptt.cc/bbs/Gossiping/index.html' # 設定cookies的值 cookies = {'over18':'1'} r = requests.get(url, cookies=cookies) print(r.text)
四、高鐵網站結構修改,附修正的程式碼。 修正的程式碼 <twhrtimetable.py>,檔名為<twhrtimetable_new.py>
|
|
|
|
文淵閣工作室
更新時間:2021/9/22 下午 01:03:43 |
|
抱歉忘了給<twhrtimetable_new.py>檔
from selenium import webdriver # 高鐵時刻表查詢網站 url = 'http://www.thsrc.com.tw/tw/TimeTable/SearchResult' ss='台中站' #出發站 es='台北站' #到達站
# 建立瀏覽器物件開啟網站 driver = webdriver.Chrome() driver.get(url) #按我同意 driver.find_element_by_xpath("//button[@class='swal2-confirm swal2-styled']").click() #輸入出發站 driver.find_element_by_id('select_location01').send_keys(ss) #輸入到達站 driver.find_element_by_id('select_location02').send_keys(es)
#票種 # driver.find_element_by_id('typesofticket').send_keys("去回程")
#輸入日期 driver.find_element_by_id("Departdate03").click() driver.find_element_by_xpath("//div[@id='tot-1']/div/div/ul/li/div/div/table/tbody/tr[5]/td[1]").click() # # #輸入時間 driver.find_element_by_id("outWardTime").click() # tr[1]/td[1]=21:00 09:00 driver.find_element_by_xpath("//div[@id='tot-1']/div[2]/div/ul/li[2]/div/div/table/tr[1]/td[1]").click()
#優惠 # xxs=driver.find_elements_by_xpath("//ul[@class='dropdown-menu inner show']") # for xx in xxs: # if "大學生" in xx.text: # xx.click()
driver.find_element_by_id('start-search').click() #按查詢鈕 |
|
|
|
孫
更新時間:2021/9/22 下午 11:01:09 |
|
能問一下
driver.find_element_by_id("outWardTime").click() # tr[1]/td[1]=21:00 09:00 driver.find_element_by_xpath("//div[@id='tot-1']/div[2]/div/ul/li[2]/div/div/table/tr[1]/td[1]").click()
tr[1]/td[1]=21:00 09:00這個要怎模看
driver.find_element_by_id("Departdate03").click()
driver.find_element_by_xpath("//div[@id='tot-1']/div/div/ul/li/div/div/table/tbody/tr[5]/td[1]").click()
tr[5]/td[1] 這個也是不太了解
|
|
|
|
孫
更新時間:2021/9/22 下午 11:13:05 |
|
那個是要用Xpath找對八
但是我用時刻的copy full Xpath 會是這個(21:00)
/html/body/div[4]/div[2]/section[3]/div/div[2]/div/div[3]/div[1]/div[2]/input
跟你的程式碼不一樣 |
|
|
|
孫
更新時間:2021/9/22 下午 11:27:42 |
|
另一個問題是
xxs=driver.find_elements_by_xpath("//ul[@class='dropdown-menu inner show']") for xx in xxs: if "大學生" in xx.text: xx.click()
的dropdown-menu與 inner show 中間不用加 / 嗎
|
|
|
|
文淵閣工作室
更新時間:2021/9/23 上午 10:54:34 |
|
#優惠 # xxs=driver.find_elements_by_xpath("//ul[@class='dropdown-menu inner show']") # for xx in xxs: # if "大學生" in xx.text: # xx.click()
這是之前回答另一個讀者問題,我已將它註解了,所以這段程式碼並不會執行。 class='dropdown-menu inner show' 中 dropdown-menu inner show 是類別名稱,並不需要加路徑。 |
|
|
|
文淵閣工作室
更新時間:2021/9/23 下午 04:20:34 |
|
高鐵網站的防護愈來愈嚴謹,很多程式內容是動態產生的,要解析其結構愈來愈因難。 有一個工具叫 Kalaton Recorder,可以協助解析,有興趣您可以 Google 一下。 附給您的程式有部份就是用 Kalaton Recorder 產生的。
xpath 搜尋的語法較複雜,我們 driver.find_element_by_xpath("//div[@id='tot-1']/div/div/ul/li/div/div/table/tbody/tr[5]/td[1]").click()
是以絕對路徑 //div[@id='tot-1'] 先找 id='tot-1' 的 div,然後拔這個 div 下中的 div/div/ul/li/div/div/table/tbody/tr[5]/td[1],這個路徑太長,不適合用手動分析,因此用 Kalaton Recorder 協助解析。
xpath 書上有提到,您可以再仔細研讀看看。 |
|
|
|
文淵閣工作室
更新時間:2021/9/23 下午 04:22:55 |
|
高鐵網站的防護愈來愈嚴謹,很多程式內容是動態產生的,要解析其結構愈來愈因難。 有一個工具叫 Kalaton Recorder,可以協助解析,有興趣您可以 Google 一下。 附給您的程式有部份就是用 Kalaton Recorder 產生的。
xpath 搜尋的語法較複雜,下列程式: driver.find_element_by_xpath("//div[@id='tot-1']/div/div/ul/li/div/div/table/tbody/tr[5]/td[1]").click()
是以絕對路徑 //div[@id='tot-1'] 先找 id='tot-1' 的 div,然後找這個 div 下中的 div/div/ul/li/div/div/table/tbody/tr[5]/td[1],這個路徑太長,不適合用手動分析,因此用 Kalaton Recorder 協助解析。
xpath 書上有提到,您可以再仔細研讀看看。 |
|
|
|