2017-01-07 4 views
-2

Я получаю сообщение об ошибке «urllib.error.HTTPError: HTTP Error 403: Forbidden» при очистке определенных страниц и понимаю, что добавление чего-то вроде hdr = {"User-Agent': 'Mozilla/5.0"} в заголовок является решением для это.urllib.error.HTTPError: HTTP Error 403: Forbidden

Однако я не могу заставить его работать, когда URL-адрес, который я пытаюсь очистить, находится в отдельном исходном файле. Как/где я могу добавить User-Agent в код ниже?

from bs4 import BeautifulSoup 
import urllib.request as urllib2 
import time 

list_open = open("source-urls.txt") 
read_list = list_open.read() 
line_in_list = read_list.split("\n") 

i = 0 
for url in line_in_list: 
    soup = BeautifulSoup(urllib2.urlopen(url).read(), 'html.parser') 
    name = soup.find(attrs={'class': "name"}) 
    description = soup.find(attrs={'class': "description"}) 
    for text in description: 
     print(name.get_text(), ';', description.get_text()) 
#  time.sleep(5) 
    i += 1 

Спасибо :)

+0

Вы пробовали читать документы 'urllib'? Или, может быть, использовать что-то более удобное, например ['request'] (http://docs.python-requests.org/en/master/)? – MattDMo

+0

Да, но я все еще не могу заставить его работать. Если я добавлю переменную 'hdr = {" User-Agent ':' Mozilla/5.0 "}' и изменим суп-строку на 'soup = BeautifulSoup (urllib2. urlopen (url, headers = hdr) .read(), 'html.parser') 'Python дает мне неожиданный вклад в слово' headers'. Есть идеи? Спасибо – Espen

+0

Вы не читали мой комментарий. ** 1. ** Перед тем, как задать вопрос, прочитайте [соответствующую документацию] (https://docs.python.org/2/library/urllib2.html#urllib2.urlopen) - в этом случае функция не имеет заголовков '. ** 2. ** Как я уже сказал, и как [документы говорят] (https://docs.python.org/2/library/urllib2.html), вы должны использовать вместо этого 'запросы'. Единственная причина, по которой запросы не находятся в std lib, состоит в том, что она все еще находится в активной разработке, и разработчики не хотели зависеть от расписания выпуска Python. Используй это. Твоей жизни будет легче. – MattDMo

ответ

1

Вы можете достичь, используя тот же requests

import requests 
hdrs = {'User-Agent': 'Mozilla/5.0 (X11 Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}  
for url in line_in_list: 
    resp = requests.get(url, headers=hdrs) 
    soup = BeautifulSoup(resp.content, 'html.parser') 
    name = soup.find(attrs={'class': "name"}) 
    description = soup.find(attrs={'class': "description"}) 
    for text in description: 
     print(name.get_text(), ';', description.get_text()) 
#  time.sleep(5) 
    i += 1 

Надеется, что это помогает!

+0

Вы спасли мой день, спасибо! – Espen

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

  • Нет связанных вопросов^_^