Beautiful Soup / urllib не читает некоторые теги HTML - PullRequest
1 голос
/ 13 марта 2019

Я недавно начал использовать Beautiful Soup. Для практики я пытаюсь почистить этот сайт .

Существуют некоторые теги div, к которым скребок, по-видимому, не может получить доступ, даже читатель URL, похоже, не читает эти теги div. HTML не указывает, что он использует JavaScript для части, которая не читается, поэтому теоретически я предполагаю, что Selenium не нужен. Особо важны теги div под идентификатором «ajaxTarget». Приведенный ниже код возвращает некоторые элементы, но большинство тегов div под этим конкретным тегом не читаются.

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup

def main():
    url_link = 'https://www.countryflags.com/en/'
    req = Request(url_link, headers={'User-Agent': 'Mozilla/5.0'})
    page = urlopen(req).read()
    soup = BeautifulSoup(page, features='lxml')
    div_master_container = soup.findAll('div', attrs={'id': 'ajaxTarget'})
    print(len(div_master_container))
    for item in div_master_container:
        print(item)

if __name__ == '__main__':
    main()

Буду признателен, если кто-нибудь укажет, есть ли элемент в HTML, который я пропускаю, или какой-либо другой фактор, способствующий этой проблеме.

1 Ответ

0 голосов
/ 13 марта 2019

Javascript должен быть запущен на странице.Используйте метод, как селен

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url ='https://www.countryflags.com/en/'
driver = webdriver.Chrome()
driver.get(url)
items = [[item.get_attribute('href'),item.get_attribute('title')] for item in WebDriverWait(driver,30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#ajaxTarget [title]")))]
print(items)
print(len(items))
#driver.quit()
...