Получение кодов возврата URL-адресов python urllib - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть список URL-адресов, некоторые из которых сейчас не работают.Я хочу проанализировать этот список и получить коды возврата этих URL-адресов и сохранить их в кадре данных.У меня есть следующий код:

for url in df['URL'][]:
print(url)
try:
    #print(urllib2.urlopen(url).getcode())
    df['returncode']=urllib2.urlopen(url).getcode()
except:
    df['returncode']='Obsolete'
    #print('obsolete')

Я получаю столбец всех «устаревших».

df['returncode']:
0         Obsolete
1         Obsolete
2         Obsolete
3         Obsolete
4         Obsolete
5         Obsolete
6         Obsolete
7         Obsolete
8         Obsolete
9         Obsolete
10        Obsolete
11        Obsolete

Принимая во внимание, что если я печатаю значения, я вижу разные коды возврата.

http://study.com/odfv.html
obsolete
http://www.meghansfashion.com/uploads/2/1/2/9/21295692/2_75_orig.png
200
http://p16.muscdn.com/img/tos-maliva-p-0068/8ab65f6aac844cdf83526b5662720be3~c5_300x400.jpeg
200
http://config.88-f.net/hb/c1/pxbfwsp
obsolete

Что я здесь не так делаю?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы можете получить коды ответов http, используя urllib2.Вы в основном там, вам просто нужно правильно обработать исключения.urllib2 вызывает исключение при получении HTTP-ответа об ошибке.

import urllib2

urls = ['http://www.google.com', 'http://google.com/does-not-exist']

for url in urls:
    try:
        res = urllib2.urlopen(url)
        code = res.getcode()
    except urllib2.HTTPError as err:
        code = err.getcode()

    print('{}: {}'.format(url, code))

Это выдаст:

http://www.google.com: 200
http://google.com/does-not-exist: 404
0 голосов
/ 10 декабря 2018

То, как вы вводите результат в DataFrame, не работает.Команда

df['returncode']= ...

помещает значение в каждую строку кадра данных.Таким образом, то, что вы видите в конце, в одиннадцать раз превышает найденное значение last .

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

for index, row in df.iterrows():
    url = row['URL']
    print(url)
    try:
        #print(urllib2.urlopen(url).getcode())
        row['returncode']=urllib2.urlopen(url).getcode()
    except:
        row['returncode']='Obsolete'
        #print('obsolete')
0 голосов
/ 10 декабря 2018

Получение кодов возврата URL-адресов python urllib


Вы можете использовать запросов для получения кода статуса http на URL, т.е.:

import requests
response = requests.get("https://google.com")
print (response.status_code)
# 200
...