亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Selenium 和 BeautifulSoup 更快地抓???

感謝這里漂亮的人的幫助,所以我能夠整理一些代碼來抓取網頁。由于頁面的動態特性,我不得不使用 Selenium,因為 BeautifulSoup 只能在您必須抓取靜態頁面時單獨使用。一個缺點是打開頁面的整個過程,等待彈出窗口打開并引入輸入需要大量時間。時間在這里是個問題,因為我必須刮掉大約 1000 頁(每個郵政編碼 1 頁),這需要大約 10 個小時。我怎樣才能優化代碼,使這個操作不會花這么長時間?我將在下面留下完整的代碼和郵政編碼列表以供復制。from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom bs4 import BeautifulSoupimport timeimport pandas as pdtime_of_day=[]price=[]Hours=[]day=[]disabled=[]location=[]danishzip = pd.read_excel (r'D:\Danish_ZIPs.xlsx')for i in range(len(danishzip)):    try:        zipcode = danishzip['Zip'][i]        driver = webdriver.Chrome(executable_path = r'C:\Users\user\lib\chromedriver_77.0.3865.40.exe')        wait = WebDriverWait(driver,10)        driver.maximize_window()        driver.get("https://www.nemlig.com/")        wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".timeslot-prompt.initial-animation-done")))        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='tel'][class^='pro']"))).send_keys(str(zipcode))        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.prompt__button"))).click()        time.sleep(3)        soup=BeautifulSoup(driver.page_source,'html.parser')郵政編碼列表:https ://en.wikipedia.org/wiki/List_of_postal_codes_in_Denmark
查看完整描述

2 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

您只需要一個簡單的請求即可獲取 json 格式的所有信息:


import requests


headers = {

    'sec-fetch-mode': 'cors',

    'dnt': '1',

    'pragma': 'no-cache',

    'accept-encoding': 'gzip, deflate, br',

    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) '

                  'Chrome/77.0.3865.120 Safari/537.36',

    'accept': 'application/json, text/plain, */*',

    'cache-control': 'no-cache',

    'authority': 'www.nemlig.com',

    'referer': 'https://www.nemlig.com/',

    'sec-fetch-site': 'same-origin',

}


response = requests.get('https://www.nemlig.com/webapi/v2/Delivery/GetDeliveryDays?days=8', headers=headers)


json_data = response.json()

例如,您可以將days=參數更改為 20 并獲取 20 天的數據。


查看完整回答
反對 回復 2022-06-22
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

Selenium 不適用于網頁抓取。

嘗試查找nemlig.com 的內部 api。無需等待 JS 處理,而是找到返回所需數據的 http 端點。您可以使用瀏覽器中的開發人員工具或一些工具(例如 Burp Suite)來完成此操作。

之后,只需使用 requests/urllib 收獲它。

https://ianlondon.github.io/blog/web-scraping-discovering-hidden-apis/


查看完整回答
反對 回復 2022-06-22
  • 2 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號