Найти - Пользователи
Полная версия: Есть url ссылки, когда просто руками добавляешь в браузер - работают все, в коде работает половина.
Начало » Python для экспертов » Есть url ссылки, когда просто руками добавляешь в браузер - работают все, в коде работает половина.
1
ElenaBarbanova
Здравствуйте, Есть url ссылки, когда просто руками добавляешь в браузер - работают все, в коде работает половина. Для тех, которые не работают пишется ошибка:
urllib.error.HTTPError: HTTP Error 400: Bad Request

как вы думаете, в чем проблема?
py.user.next
Для начала надо изобразить браузер. Для этого обычно заголовок User-Agent надо установить на слово Firefox (этого хватает обычно).
ElenaBarbanova
import traceback
from urllib.request import urlopen
from Data import Data


class CSVWriter:
def __init__(self):
self.total1 = 0
self.total2 = 0

def getResponseFromUrl(self, metric_url):
try:
response = urlopen(metric_url)
html = response.read()
return html
except:
print("Could not open URL: " + metric_url)
print(traceback.print_exc())
return ""

def writeToCSV(self, filename, metric_url):
data_dict = []
response = self.getResponseFromUrl(metric_url)
if len(response) > 0:
response = response.decode('utf8').split("\n")
n = 0
with open("Output\\" + filename, 'w', encoding='utf8') as the_file:
for line in response:
print(line)
n += 1
the_file.write(line + '\n')
if n == 2:
self.total1 = line.split("\",\"")[1].replace("\"", "")
self.total2 = line.split("\",\"")[2].replace("\"", "")
if n > 2:
if len(line) == 0:
# this is the end of file. last line comes empty from metrics
break
# calculate percents
title = line.split("\",\"")[0] + "\""
line_total1 = line.split("\",\"")[1].replace("\"", "")
line_total2 = line.split("\",\"")[2].replace("\"", "")
percent1 = float(line_total1) * 100 / float(self.total1)
percent2 = float(line_total2) * 100 / float(self.total2)
data_dict.append(Data(title, percent1, percent2))
print("\n")
file_title = filename.split(".")[0]
file_extension = filename.split(".")[1]
new_filepath = "Output\\" + file_title + "_percents." + file_extension
with open(new_filepath, 'w', encoding='utf8') as the_file:
for data in data_dict:
the_file.write(data.title + ", " + "{0:.2f}".format(data.percent1) + "%" + ", " + "{0:.2f}".format(data.percent2) + "%" + "\n")
ElenaBarbanova
Можно попотробнее, где именно это написать
py.user.next
ElenaBarbanova
 response = urlopen(metric_url)
Вот здесь надо передавать объект urllib.request.Request() у которого установить заголовок User-Agent.
https://docs.python.org/3/library/urllib.request.html#urllib.request.Request

Перед этим надо удостовериться, что дело в заголовке. Надо использовать либо программу wget, либо curl. Там можно передавать заголовки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB