我最近开始使用美汤。为了练习,我试着抓取this website。
有一些div标签似乎无法被抓取器访问,甚至URL阅读器似乎也无法读取这些div标签。超文本标记语言并没有表明它正在使用JavaScript来处理未被读取的部分,所以理论上我假设Selenium是不需要的。具体地说,名为"ajaxTarget“的ID下的div标记才是问题所在。下面的代码返回了一些元素,但是这个特定标签下的大多数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中是否有我遗漏的元素或任何其他导致这个问题的因素,我将不胜感激。
发布于 2019-03-13 05:44:11
Javascript需要在页面上运行。使用像selenium这样的方法
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()
https://stackoverflow.com/questions/55130986
复制相似问题