2016-06-30 2 views
1

Я пробовал каждые 'User-Agent' в here, все еще получаю urllib.error.HTTPError: HTTP Error 400: Bad Request. Я также пробовал this, но я получаю urllib.error.URLError: File Not Found. Я понятия не имею, что делать, мои текущие коды;Urllib проблема с неправильным запросом

from bs4 import BeautifulSoup 
import urllib.request,json,ast 

with open ("urller.json") as f: 
    cc = json.load(f) #the file I get links, you can try this link instead of this 
    #cc = ../games/index.php?g_id=23521&game=0RBITALIS 

for x in ast.literal_eval(cc): #cc is a str(list) so I have to convert 
    if x.startswith("../"): 

     r = urllib.request.Request("http://www.game-debate.com{}".format(x[2::]),headers={'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'}) 
     #x[2::] because I removed '../' parts from urlls 

     rr = urllib.request.urlopen(r).read() 
     soup = BeautifulSoup(rr) 

     for y in soup.find_all("ul",attrs={'class':['devDefSysReqList']}): 
      print (y.text) 

Edit: Если вы попробуете только 1 ссылка, вероятно, он не будет показывать какие-либо ошибки, так как я получаю ошибку каждый раз, когда на 6-й линии.

+0

Вы используете _ urlib? Я просто попробовал 'request.get (« http://www.game-debate.com/games/index.php?g_id=23521&game=0RBITALIS »)', и он отлично работает. «запросы» намного превосходят практически во всех отношениях. –

+0

@AkshatMahajan, но я отредактировал вопрос, если вы попробуете только 1 ссылку, вероятно, это будет нормально, так как я получаю эту ошибку с ошибкой каждый раз на 6-й ссылке из файла json. – GLHF

+0

Вы пробовали печатать каждый URL-адрес перед тем, как сделать запрос? Возможно, URL-адрес некорректен. –

ответ

1

Быстрое исправление заменить пространство +:

url = "http://www.game-debate.com" 
r = urllib.request.Request(url + x[2:] ,headers={'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'}) 

Лучшим вариантом может быть, чтобы позволить URLLIB quote в Титулы:

from bs4 import BeautifulSoup 
import urllib.request,json,ast 
from urllib.parse import quote, urljoin 

with open ("urller.json") as f: 
    cc = json.load(f) #the file I get links, you can try this link instead of this 
    url = "http://www.game-debate.com" 


    for x in ast.literal_eval(cc): # cc is a str(list) so I have to convert 
     if x.startswith("../"): 
      r = urllib.request.Request(urljoin(url, quote(x.lstrip("."))), headers={ 
       'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'}) 

      rr = urllib.request.urlopen(r).read() 
      soup = BeautifulSoup(rr) 
      print(rr.decode("utf-8")) 

      for y in soup.find_all("ul", attrs={'class':['devDefSysReqList']}): 
       print (y.text) 

Пробелы в URL не являются действительными и необходимость для процента кодируется как %20 или заменен на +.

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