Ton*_*Ton 1 python ajax selenium web-scraping
伙计们,我目前有一个工作脚本,可以从某个页面抓取 ajax 内容...问题是它需要 +- 12 秒才能运行,出于我的目的,我需要它更快。
有小费吗?
from urllib.parse import urlencode
import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
def search_char():
char_name_input = str(input('Search Character: ')) # User input / Character Name
start_time = time.time()
browser = webdriver.PhantomJS()
search_url = 'https://www.tibia.com/community/?subtopic=characters' # URL
r = browser.get(search_url) # Searched Character Page
element = browser.find_element_by_name("name")
element.send_keys(char_name_input)
element2 = browser.find_element_by_name("Submit").click()
page = browser.find_element_by_id('Content')
rendered_page = page.get_attribute('innerHTML')
soup = BeautifulSoup(rendered_page, 'html.parser')
selection = soup.find_all('td')
lista = []
for item in selection:
lista.append(item.get_text())
browser.close()
print("--- %s seconds ---" % (time.time() - start_time))
for i in lista:
print(i,'\n')
search_char()
Run Code Online (Sandbox Code Playgroud)
我有几个建议:
切换到无头镀铬,它会更快
将 features.pageLoadStrategy 设置为“none”并使用 WebDriverWait / EC 等待元素。这样它就可以在一切加载之前继续
始终使用 css 选择器而不是 name / id / xpath
send_keys 很慢,请使用 javascript 设置这些值
你不需要漂亮的汤,这里有一个如何获得这些汤的例子:
lista = browser.execute_script(" return [...document.querySelectorAll('#Content td')].map(s => s.innerText) ")
如果您完成所有这些工作,我预计您的时间会减少一半,如果您切换到 Puppeteer,时间会减少一半
| 归档时间: |
|
| 查看次数: |
6386 次 |
| 最近记录: |