1. Python リクエスト ライブラリを使用して Web サイトの画像をクロールします
クロール Web サイト: http://www.pes-stars.co.ua/?page1/
- Web サイトに入ったら、F12 キーを押して開発者モード [要素] を開き、マウスを移動して、以下の図に示すように、ダウンロードする画像の情報を表示します。
- User-AgentとRefererの情報を見つけて、通常は一番下の列にある[Network]を選択し、クリックすると一番下に[User-Agent]があるので、それをヘッダーの一部としてコピーします
- コード:
import requests
import time
from lxml import etree
url = 'http://www.pes-stars.co.ua/?page1/'
headers = {
"Referer":" ",}
resq = requests.get(url,headers = headers)
print(resq)
html = etree.HTML(resq.text)
srcs = html.xpath(".//img/@src")
for i in srcs:
imgname = i.split('/')[-1]
img = requests.get(i,headers = headers)
with open('imgs1/'+imgname,'wb') as file:
file.write(img.content)
print(i,imgname)
2. エラー報告
Web ページの最初の数タイトルをダウンロードした後、本当にダウンロードしたい体の部分の顔画像に関してエラーが報告されたことがわかりました。各画像の [src] を確認すると、次のことがわかりました。正常にダウンロードされた
画像:
エラー [src]:
[src] エラーの接続に問題があることが判明しました。http: 情報が欠落しています。手動で追加すると、コードは次のようになります。
import requests
import time
from lxml import etree
url = 'http://www.pes-stars.co.ua/?page1/'
headers = {
"Referer":"Referer: http://www.pes-stars.co.ua/?page1/",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70",}
resq = requests.get(url,headers = headers)
print(resq)
html = etree.HTML(resq.text)
srcs = html.xpath(".//img/@src")
for i in srcs:
print('1---i: ', i)
imgname = i.split('/')[-1]
j = 'http://www.pes-stars.co.ua' + i
print('2---j: ', j)
try:
img = requests.get(j, headers=headers)
with open('imgs1/' + imgname, 'wb') as file:
file.write(img.content)
print(i, imgname)
except requests.exceptions.ConnectionError:
requests.status_code = "Connection refused"
正常にダウンロードされました。
3. 複数ページの写真をクロールする
各ページの URL を見ると、最後の番号だけが異なることがわかります。
http://www.pes-stars.co.ua/?page1
http://www.pes-stars.co.ua/?page2
http://www.pes-stars.co.ua/?page3
...
URL に直接 for ループを追加して、ダウンロードするページ数を選択します。
# -*- coding:utf-8 -*-
# Author: 自学小白菜
'''
既然选择了前进,那每一步都要认真的去做
'''
import requests
import time
from lxml import etree
for m in range(1, 301): # 爬取1-300页的图
m += 1
url = 'http://www.pes-stars.co.ua/?page' + str(m)
print('url: ', url)
headers = {
"Referer": "Referer: 'http://www.pes-stars.co.ua/?page",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70",}
resq = requests.get(url, headers=headers)
print('resq: ', resq)
html = etree.HTML(resq.text)
srcs = html.xpath(".//img/@src")
for i in srcs:
# print('1---i: ', i, srcs)
list1 = str(i)
if list1[-3:] == 'jpg':
imgname = i.split('/')[-1]
j = 'http://www.pes-stars.co.ua' + i
# print('2---j: ', j, imgname)
try:
img = requests.get(j, headers=headers)
with open('imgs1/' + imgname, 'wb') as file:
file.write(img.content)
print(i, imgname)
except requests.exceptions.ConnectionError:
requests.status_code = "Connection refused"