首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Beautiful / urllib不读取某些HTML标记

Beautiful / urllib不读取某些HTML标记
EN

Stack Overflow用户
提问于 2019-03-13 05:35:47
回答 1查看 38关注 0票数 1

我最近开始使用美汤。为了练习,我试着抓取this website

有一些div标签似乎无法被抓取器访问,甚至URL阅读器似乎也无法读取这些div标签。超文本标记语言并没有表明它正在使用JavaScript来处理未被读取的部分,所以理论上我假设Selenium是不需要的。具体地说,名为"ajaxTarget“的ID下的div标记才是问题所在。下面的代码返回了一些元素,但是这个特定标签下的大多数div标签都没有被读取。

代码语言:javascript
复制
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中是否有我遗漏的元素或任何其他导致这个问题的因素,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 05:44:11

Javascript需要在页面上运行。使用像selenium这样的方法

代码语言: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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55130986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档