Saya memiliki CSV yang saya baca menggunakan panda dan terlihat seperti:

                |    URL            | Status Code | 
--------------- | ------------------|-------------|
       0        | www.example.com   |    404      |
----------------|-------------------|-------------|
        1       | www.example.com/2 |   404       |

Saya ingin memeriksa apakah URL di kolom kedua masih merespons dengan 404. Saya memiliki kode ini:

url = df['URL']
urlData = requests.get(url).content
rawData = pd.read_csv(io.StringIO(urlData.decode('utf-8')))
print(rawData)

Saya mendapatkan kesalahan berikut:

InvalidSchema: Tidak ada adaptor koneksi yang ditemukan untuk '0 http://www.example.com

1 http://www.example.com/2

Nama: URL, dtype: objek'

Saya mencari beberapa pertanyaan tetapi tidak dapat menemukan jawabannya. Bantuan apa pun dihargai.

0
Robert Padgett 7 Agustus 2017, 22:28

2 jawaban

Jawaban Terbaik

requests.get tidak dapat disiarkan, jadi Anda Anda harus memanggilnya untuk setiap URL dengan pandas.DataFrame.apply:

>>> df['New Status Code'] = df.URL.apply(lambda url: requests.get(url).status_code)
>>> df
   Status Code                URL  New Status Code
0          404    www.example.com              404
1          404  www.example.com/2              404

Atau gunakan numpy.vectorize:

>>> vectorized_get = numpy.vectorize(lambda url: requests.get(url).status_code)
>>> df['New Status Code'] = vectorized_get(df.URL)
2
randomir 7 Agustus 2017, 19:44

Df['URL'] akan mengembalikan Anda serangkaian data, bukan nilai tunggal. Saya menduga kode Anda meledak di baris request.get(url).content.

Bisakah Anda memposting lebih banyak kode?

Anda mungkin ingin melihat fungsi apply: https: //pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html.

0
David 7 Agustus 2017, 19:35