Почему я не могу получить доступ к контейнерам таблиц в html? - PullRequest
1 голос
/ 14 июля 2020

Я новичок в Python и веб-скрейпинге. Я пытаюсь получить доступ к данным во всех таблицах на этой веб-странице, и я не уверен, почему мой код не работает. Возможно, что-то связано с неспособностью JavaScript и python его прочитать. Мой код:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}
res = requests.get("https://www.mcmaster.com/cam-lock-fittings/material~aluminum/", headers=headers)

soup = BeautifulSoup(res.text, 'lxml')

item_containers = soup.findAll("div", {"class":"ItmTblCntnr PrsnttnTbl"})

print(len(item_containers))

Любая помощь будет принята с благодарностью! Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Я пошел дальше и открыл веб-страницу, к которой вы пытаетесь получить доступ с помощью своего кода. Когда вы видите анимацию счетчика на странице, это означает, что он использует JavaScript. Когда вы делаете запрос с помощью библиотеки запросов, он не выполняет никаких JavaScript. Он получает только html, которые отправляет сервер. В этом случае таблицы, к которым вы пытаетесь получить доступ, вероятно, не существуют при начальной загрузке веб-страницы. Таким образом, если вы захотите очистить веб-страницу, подобную этой, вы должны использовать программное обеспечение для автоматизации браузера, такое как селен.

0 голосов
/ 14 июля 2020

Может быть, вам стоит попробовать использовать html .parser и атрибут содержимого ответа:

soup = BeautifulSoup(res.content, "html.parser")

Кстати, какую версию Beautiful soup вы используете? В моем случае я должен использовать find_all вместо findAll.

...