2014-09-06 2 views
1

Я установил webscraper с beautifulsoup, selenium (chrome) и python.Selenium не полностью загружает файлы

Это довольно просто, beautifulsoup анализирует страницу, полную ссылок, и селен следует за этими ссылками 1 за раз. Selenium находит определенную ссылку для загрузки на каждой странице и нажимает ее, начиная загрузку. Я бы использовал beautifulsoup с этим, но если я не использую браузер, который нажимает на ссылку, он отправит меня на страницу с captcha.

В любом случае, когда селен начинает загрузку файлов, а прогессионные шоу отображаются в нижней части экрана с хромом. Но после кажущегося случайного количества времени, он говорит, что файл полностью загружается через несколько секунд, прежде чем он будет выполнен на полпути. Файл может быть размером 8 МБ, он загружает только 500 кб, а затем говорит, что он закончен. Я не знаю, почему он не будет полностью загружать файлы, не знает ли кто-нибудь способ дождаться его полной загрузки файла? Существует ли ограничение на количество загружаемых файлов одновременно? Потому что я загружаю довольно много файлов.

У меня нет понятия, что делать здесь, я надеюсь, что кто-то может пролить свет.

+0

Это может быть, что вам не нужно селена здесь. Может быть, передача соответствующего заголовка (например, User-Agent, притворяясь браузером) поможет. Без кода трудно сказать. – alecxe

ответ

0

Здесь не нужно selenium.

Использование requests и BeautifulSoup вполне достаточно. Просто установить заголовки в User-Agent, Host и Referer правильно:

from bs4 import BeautifulSoup 
import requests 

URL = 'url here' 

def download_file(url, filename, headers): 
    r = requests.get(url, stream=True, headers=headers) 
    with open(filename, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: 
       f.write(chunk) 
       f.flush() 

# get link and file name 
response = requests.get(URL) 
soup = BeautifulSoup(response.content) 
a = soup.find('td', text='Download:').next_sibling.a 
link = a.get('href') 
filename = a.text + '.pdf' 

# download file 
headers = { 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36', 
    'Host': 'filepi.com', # host could be extracted from the link 
    'Referer': URL 
} 
download_file(link, filename, headers) 
+0

Спасибо большое! Это прекрасно работает, теперь я буду интегрировать это в код, который у меня есть. На самом деле я до сих пор не слышал о запросах, поэтому, вероятно, буду проводить следующие несколько дней, выясняя это. Я очень рад, что мне не нужно было использовать селен для этого проекта, и мне интересно, почему он не будет полностью загружать файлы. –

+0

@alecxe сейчас 'http: // filepi.com' использует captcha. Тогда как это возможно. –

Смежные вопросы