Я пытаюсь очистить некоторые данные от Yahoo. Я написал сценарий, который работает - иногда. Иногда, когда я запускаю скрипт, я могу загрузить полную страницу - в другое время страница загружается только частично - с отсутствием части данных.Веб царапины с dryscrape и BeautifulSoup
Что еще более озадачивает, так это то, что когда я перехожу к этой странице в своем браузере, отображается вся страница.
Вот суть моего кода:
import dryscrape
from bs4 import BeautifulSoup
url = 'http://finance.yahoo.com/quote/SPY/options?p=SPY&straddle=false'
sess = dryscrape.Session()
sess.set_header('user-agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0')
sess.set_attribute('auto_load_images', False)
sess.set_timeout(360)
sess.visit(url)
soup = BeautifulSoup(sess.body(), 'lxml')
# Related to memory leak issue in webkit
sess.reset()
# Barfs (sometimes!) at the line below
sel_list = soup.find('select', class_='Fz(s)')
if sel_list is None or len(sel_list) == 0:
print('element not found on page!')
Я присоединенные изображения страниц принесли ниже. Вот веб-страницы, при просмотре через Интернет, через веб-браузер:
Теперь, вот страница, которую я потянул вниз через сценарий, аналогичный показанному выше - и у него нет данных :
Может кто-нибудь понять, почему этот элемент иногда отсутствует, когда данные считываются с помощью моего сценария? В равной степени (более?) Важно, как я могу это исправить?
Это может загружать кучу данных с помощью Javascript, и ваш скрипт не работает Javascript. Попробуйте отключить Javascript в своем браузере и посмотреть, не получает ли браузер все данные. – LarsH
Вы пытались добавить небольшую задержку между вытаскиванием URL-адреса и загрузкой источника в bs4? – jinksPadlock