Используя Селен с Python, как я могу получить Var из HTML, где он объявлен в элементе JS <script> - PullRequest
0 голосов
/ 29 марта 2019

Я хочу, чтобы var был объявлен внутри JS в htm ;.но там нет идентификаторов, элементов.Как я могу получить эти данные?

Поскольку нет адреса, а есть только имя переменной, я не знаю, как это сделать

Веб-сайт HTML:

Website HTML picture

<script type="text/javascript">
var imgInfoData = 'data which i want to crawl'

</script>

Код моего питона:

#set url
HOMEPAGE = "https://land.naver.com/info/complexGallery.nhn?newComplex=Y&startImage=Y&rletNo=102235"


#open web
driver = webdriver.Firefox()
driver.wait = WebDriverWait(driver, 2)
driver.get(HOMEPAGE)

#try to get text from html
time.sleep(1)
WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, '//script["var"]'))).text

1 Ответ

2 голосов
/ 29 марта 2019

Я проверяю сайт, который вы просматриваете, и кажется, что сценарии уже включены в html-страницу, поэтому я думаю, что вам не нужно использовать webdriver, и вы можете просто использовать запросы и BeautifulSoup .

получить html-данные, используя запросы:

res = requests.get(url, headers=headers, params=params)

Затем добавьте текст html, чтобы получить теги сценария и найти, какие теги имеют var imgInfoData :

soup = BeautifulSoup(res.text, "html5lib")
    scripts = soup.findAll('script', attrs={'type':'text/javascript'})
    for script in scripts:
        if "var imgInfoData" in script.text: #script with imgInfoData captured
            return script.text.replace("var imgInfoData =","").strip()[:-1]

просто удалите

var imgInfoData =

и

;

текста, чтобы получить строковое значение, или вы можете использовать regex , чтобы получить строку json внутри текста.

Полный код:

import requests
from bs4 import BeautifulSoup

def getimgInfoData():
    url = "https://land.naver.com/info/complexGallery.nhn"
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    params = {"newComplex":"Y",
              "startImage":"Y",
              "rletNo":"102235"}
    res = requests.get(url, headers=headers, params=params)

    soup = BeautifulSoup(res.text, "html5lib")
    scripts = soup.findAll('script', attrs={'type':'text/javascript'})
    for script in scripts:
        if "var imgInfoData" in script.text: #script with imgInfoData captured
            return script.text.replace("var imgInfoData =","").strip()[:-1]
    return None

print(getimgInfoData())

, затем просто конвертируйте результат из getimgInfoData () в json , если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...