Python открыть URL-адрес и извлечь значение location.href из 'onclick' - PullRequest
1 голос
/ 27 апреля 2020

Вот элемент проверки из URL "https://www.example.com":

<button type="button" class="btn btn-click" onclick="location.href='https://d3.net/archive/123.mp4'"></button>

Я хочу написать скрипт для открытия вышеуказанного URL (https://www.example.com ), а затем извлеките это 'https://d3.net/archive/123.mp4' из 'onclick'.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете легко сделать это с помощью Selenium.

from selenium import webdriver
import re

driver = webdriver.Firefox()
# Navigate to the URL
driver.get("http://www.example.com")
# Find all links matching our XPATH
elements_list = driver.find_elements_by_xpath("//button[@class='btn btn-click']")
# Iterate the element list
for element in elements_list: 
    # Extract the onClick attribute value
    onclick_attr_value = element.get_attribute("onclick")
    # Match regex to capture the URL only
    match = re.search("'(.*)'", onclick_attr_value)
    if match:
        # If the regex matched, Bingo!
        found_url = match.group(1)
        print(found_url)
0 голосов
/ 27 апреля 2020

Если вы хотите go на таких ссылках, я рекомендую другой подход:

используйте CSS Селекторы

Нет * Необходим модуль re.

Обновление 1 для отладки

Если вы хотите увидеть суп, полученный по вашему запросу, вы можете сделать это здесь (см. Комментарий #DEBUG1) или в Пример кода ниже (#DEBUG3), чтобы увидеть, что вы получаете в качестве ингредиентов для супа, см. #DEBUG2 в примере кода ниже.


from bs4 import BeautifulSoup 
#DEBUG1 print the soup. 
# import sys
# print >> sys.stderr, soup.prettify() # python2.X
print(soup.prettify) # python3.X

# select button with location href at the beginning (you can add the class as well)
for item in soup.select("button[onclick^=\"location.href=\"]"):
    # ... do stuff here, e.g.
    onclick = item["onclick"]
    href = onclick.split("=")[1]

    # now href is 'https://d3spcaxyl0it1f.cloudfront.net/archive/123.mp4'
    href = href.strip("'")

    # the leading and trailing ' are gone.
    if href.endswith(".mp4"):
        # do stuff here or precise your css selector further
        # ...

Почему вы должны использовать этот подход? Чтобы ваша кнопка действительно имела запрошенные атрибуты.

Почему это хорошо? Потому что вам не нужно проверять существование атрибута, используя сначала item.get('onclick'), а затем действовать на основе этого решения.

Как вы получаете страницу в свой суп? (Прямая цитата от @ akore128 )


# import sys
import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://www.example.com') 
#DEBUG2
# print >> sys.stderr, page.text # python2.X
print(page.text) # python3.X

# Create a BeautifulSoup object 
soup = BeautifulSoup(page.text, 'html.parser')
#DEBUG3 print the soup. 
# print >> sys.stderr, soup.prettify() # python2.X
print(soup.prettify) # python3.X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...