2015-04-23 2 views
-1

Что я пытаюсь сделать, так это использовать Beautifulsoup для загрузки каждого zip-файла из архива Google Patent. Ниже приведен код, который я написал до сих пор. Но кажется, что у меня возникают проблемы с загрузкой файлов в каталог на моем рабочем столе. Любая помощь будет принята с благодарностьюBeautifulsoup скачать все .zip-файлы из Google Patent Search

from bs4 import BeautifulSoup 
import urllib2 
import re 
import pandas as pd 

url = 'http://www.google.com/googlebooks/uspto-patents-grants.html' 

site = urllib2.urlopen(url) 
html = site.read() 
soup = BeautifulSoup(html) 
soup.prettify() 

path = open('/Users/username/Desktop/', "wb") 

for name in soup.findAll('a', href=True): 
    print name['href'] 
    linkpath = name['href'] 
    rq = urllib2.request(linkpath) 
    res = urllib2.urlope 

результат, который я должен получить, что все почтовые файлы должны загрузить в определенную директорию. Вместо этого, я получаю следующее сообщение об ошибке:

> #2015 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) 
> <ipython-input-13-874f34e07473> in <module>() 17 print name['href'] 18 
> linkpath = name['href'] ---> 19 rq = urllib2.request(namep) 20 res = 
> urllib2.urlopen(rq) 21 path.write(res.read()) AttributeError: 'module' 
> object has no attribute 'request' – 
+1

Что вы возникли проблемы с? Каковы ожидаемые результаты? Что происходит вместо этого? –

+0

Предполагается загрузить все zip-файлы, но вместо этого я получаю эту ошибку. # 2015 ----------------------------- ---------------------------------------------- Traтрибут атрибутаError (самый последний вызов последнего) в () 17 имени печати [ 'HREF'] 18 linkpath = имя [ 'HREF'] ---> 19 Rq = urllib2.request (namep) 20 res = urllib2.urlopen (rq) 21 path.write (res.read()) AttributeError: объект 'module' не имеет атрибута 'request' – icomefromchaos

ответ

1

В дополнении к использованию несуществующей запрос объекта от urllib2 , вы не выходите в файл правильно - вы не можете просто открыть каталог, вы должны открыть каждый файл для вывода отдельно.

Кроме того, пакет «Запросы» имеет гораздо более приятный интерфейс, чем urllib2. Я рекомендую установить его.

Обратите внимание, что сегодня все равно первый .zip - 5.7Gb, поэтому потоковая передача в файл имеет важное значение.

Действительно, вы хотите что-то более, как это:

from BeautifulSoup import BeautifulSoup 
import requests 

# point to output directory 
outpath = 'D:/patent_zips/' 
url = 'http://www.google.com/googlebooks/uspto-patents-grants.html' 
mbyte=1024*1024 

print 'Reading: ', url 
html = requests.get(url).text 
soup = BeautifulSoup(html) 

print 'Processing: ', url 
for name in soup.findAll('a', href=True): 
    zipurl = name['href'] 
    if(zipurl.endswith('.zip')): 
     outfname = outpath + zipurl.split('/')[-1] 
     r = requests.get(zipurl, stream=True) 
     if(r.status_code == requests.codes.ok) : 
      fsize = int(r.headers['content-length']) 
      print 'Downloading %s (%sMb)' % (outfname, fsize/mbyte) 
      with open(outfname, 'wb') as fd: 
       for chunk in r.iter_content(chunk_size=1024): # chuck size can be larger 
        if chunk: # ignore keep-alive requests 
         fd.write(chunk) 
       fd.close() 
+1

JohnH ... Спасибо! это именно то, что я ищу. – icomefromchaos

1

Это ваша проблема:

rq = urllib2.request(linkpath) 

urllib2 является модулем и он не имеет запрос сущности/атрибута в нем.

Я вижу Запрос класса в urllib2, но я не уверен, если это то, что вы хотели на самом деле использовать ...

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