کتابخانه درخواست های پایتون (نمونه ها و ویدئو)

را کتابخانه درخواست های پایتون برای ایجاد درخواست های HTTP در پایتون استفاده می شود.

مثال درخواست پایتون

import requests

url = 'https://crawler-test.com/'
r = requests.get(url)

r.text

در این آموزش، نحوه استفاده از ماژول درخواست های پایتون را با مثال هایی یاد خواهید گرفت:

  • ساختار یک درخواست را درک کنید
  • درخواست های GET و POST را ارسال کنید
  • عناصر HTML یک صفحه وب را بخوانید و استخراج کنید
  • درخواست های خود را بهبود بخشید

بیایید نحوه استفاده از درخواست های پایتون را بیاموزیم.

نحوه استفاده از درخواست های پایتون

برای استفاده از ماژول درخواست های پایتون این مراحل را دنبال کنید.

  1. بسته درخواست های پایتون را نصب کنید

    $ pip install requests

  2. ماژول درخواست ها را وارد کنید

    import requests

  3. با استفاده از روش GET درخواست بدهید

    از متد GET استفاده کنید و پاسخ را در یک متغیر ذخیره کنید.
    r = requests.get(url)

  4. پاسخ را با استفاده از ویژگی ها و روش های درخواست بخوانید

    می‌توانید با استفاده از ویژگی‌های آن با شی درخواست پایتون تعامل داشته باشید (مثلاً r.status_code) و روش ها (مثلا r.json()).

درخواست های پایتون را دانلود و نصب کنید

از pip برای نصب آخرین نسخه درخواست های پایتون استفاده کنید.

برای این راهنما، باید پایتون را نصب کرده و بسته های زیر را نصب کنید.

$ pip install beautifulsoup4
$ pip install urllib

ماژول درخواست را وارد کنید

برای وارد کردن requests کتابخانه در پایتون از کلمه کلیدی import استفاده می کند.

روش های درخواست پایتون

در زیر متدهای درخواست پایتون ذکر شده است:

  • گرفتن: یک درخواست GET را به یک URL داده شده ارسال می کند. به عنوان مثال get(url, parameters, arguments)
  • پست: یک درخواست POST برای انتشار داده های مشخص شده به یک URL داده شده ارسال می کند. به عنوان مثال post(url, data, json, arguments)
  • قرار دادن: یک درخواست PUT برای جایگزینی داده ها در یک URL داده شده ارسال می کند. به عنوان مثال put(url, data, arguments)
  • پچ: یک درخواست PATCH برای ایجاد تغییرات جزئی در داده های یک URL داده شده ارسال می کند. به عنوان مثال patch(url, data, arguments)
  • حذف: یک درخواست DELETE برای حذف داده ها از یک URL داده شده ارسال می کند. به عنوان مثال delete(url, arguments)
  • سر: یک درخواست HEAD را به یک URL داده شده ارسال می کند. این شبیه به درخواست GET است، اما بدون بدنه. به عنوان مثال head(url, arguments)
  • گزینه ها: گزینه های ارتباطی را برای یک URL مشخص مشخص کنید. به عنوان مثال options(url)
  • درخواست: شی درخواست را با تعیین روش انتخابی ایجاد می کند.

اکنون چند نمونه از متدهای درخواست در پایتون را مشاهده خواهیم کرد.

Python Get Requests

پیتون درخواست می کند get() متد درخواست های GET را برای یک URL داده شده، مجموعه ای از پارامترها و آرگومان ها به سرور وب ارسال می کند. متد get() از این الگو پیروی می کند:

get(url, parameters, arguments)

نحوه ارسال درخواست دریافت در پایتون

برای ارسال درخواست های GET در پایتون، از get() روش با URL که می خواهید اطلاعات را از آن بازیابی کنید.

import requests

url = 'https://crawler-test.com/'
response = requests.get(url)

print('URL: ', response.url)
print('Status code: ', response.status_code)
print('HTTP header: ', response.headers)

خروجی:

URL:  https://crawler-test.com/
Status code:  200
HTTP header:  {'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=utf-8', 'Date': 'Sun, 03 Oct 2021 23:41:59 GMT', 'Server': 'nginx/1.10.3', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '8098', 'Connection': 'keep-alive'}

ارسال درخواست ها

پیتون درخواست می کند post() متد درخواست‌های POST را به سرور وب ارسال می‌کند تا داده‌های مشخص شده را در یک URL مشخص منتشر کند. متد post() از این الگو پیروی می کند:

post(url, data, json, arguments)

نحوه ارسال درخواست پست در پایتون

برای ارسال درخواست های POST در پایتون، از post() روش. URL و نمایش فرهنگ لغت داده‌هایی که قرار است منتشر شوند را به آن اضافه کنید data پارامتر.

import requests

url = 'https://httpbin.org/post'

payload = {
    'name':'Jean-Christophe',
    'last_name':'Chouinard',
    'website':'https://www.jcchouinard.com/'
    }

response = requests.post(url, data = payload)

response.json()

خروجی:

{'args': {},
 'data': '',
 'files': {},
 'form': {'last_name': 'Chouinard',
  'name': 'Jean-Christophe',
  'website': 'https://www.jcchouinard.com/'},
 'headers': {'Accept': '*/*',
  'Accept-Encoding': 'gzip, deflate',
  'Content-Length': '85',
  'Content-Type': 'application/x-www-form-urlencoded',
  'Host': 'httpbin.org',
  'User-Agent': 'python-requests/2.24.0',
  'X-Amzn-Trace-Id': 'Root=1-615a4271-417e9fff3c75f47f3af9fde2'},
 'json': None,
 'origin': '149.167.130.162',
 'url': 'https://httpbin.org/post'}

روش‌ها و ویژگی‌های شی پاسخگوی پایتون

را شی python.response حاوی پاسخ سرور به درخواست HTTP است.

با استفاده از آن می توانید جزئیات شی Response را بررسی کنید help().

import requests

url = 'https://crawler-test.com/'
response = requests.get(url)

help(response)

در این آموزش به موارد زیر خواهیم پرداخت:

  • متن، داده های توصیف شدهr: محتوای پاسخ، در یونیکد.
  • محتوا، توصیفگر داده : محتوای پاسخ، بر حسب بایت.
  • آدرس اینترنتی، صفت : آدرس درخواست
  • وضعیت_کد، صفت : کد وضعیت بازگردانده شده توسط سرور
  • سرصفحه ها صفت : هدرهای HTTP که توسط سرور برگردانده شده است
  • تاریخ، صفت : لیستی از اشیاء پاسخ که تاریخچه درخواست را در خود دارند
  • پیوندها، صفت : پیوندهای سرصفحه تجزیه شده پاسخ را در صورت وجود برمی گرداند.
  • json، روش : در صورت وجود، محتوای کدگذاری شده با json پاسخ را برمی‌گرداند.

به روش‌ها و ویژگی‌های پاسخ دسترسی داشته باشید

پاسخ از درخواست یک شی است که در آن می توانید به متدها و ویژگی های آن دسترسی داشته باشید.

با استفاده از object.attribute علامت گذاری و روش های استفاده از object.method() نشانه گذاری.

import requests

url = 'http://archive.org/wayback/available?url=jcchouinard.com'
response = requests.get(url)

response.text # access response data atributes and descriptors
response.json() # access response methods
{'url': 'jcchouinard.com',
 'archived_snapshots': {'closest': {'status': '200',
   'available': True,
   'url': 'http://web.archive.org/web/20210930032915/https://www.jcchouinard.com/',
   'timestamp': '20210930032915'}}}

پاسخ پایتون را پردازش کنید

نحوه دسترسی به JSON درخواست های پایتون

در درخواست های پایتون، response.json() متد اجازه می دهد تا به شی JSON پاسخ دسترسی پیدا کنید. اگر نتیجه درخواست با فرمت JSON نوشته نشده باشد، رمزگشای JSON آن را برمی گرداند requests.exceptions.JSONDecodeError استثنا.

نحوه نمایش کد وضعیت درخواست پایتون

برای نشان دادن کد وضعیت بازگردانده شده توسط یک درخواست get() پایتون از status_code ویژگی شی پاسخ.

import requests

url = 'https://crawler-test.com/'
r = requests.get(url)

r.status_code
# 200

چگونه HTML صفحه را با درخواست های پایتون دریافت کنیم

برای دریافت HTML یک صفحه وب با استفاده از درخواست های پایتون، یک درخواست GET به URL داده شده و text ویژگی پاسخ Object برای دریافت HTML به عنوان Unicode و content ویژگی برای دریافت HTML به عنوان بایت.

import requests

url = 'https://crawler-test.com/'
r = requests.get(url)

r.text # get content as a string
r.content # get content as bytes

برای نمایش هدرهای HTTP مورد استفاده در درخواست Python GET، از headers ویژگی شی پاسخ.

import requests

url = 'https://crawler-test.com/'
r = requests.get(url)
r.headers
{'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=utf-8', 'Date': 'Tue, 05 Oct 2021 04:23:27 GMT', 'Server': 'nginx/1.10.3', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '8099', 'Connection': 'keep-alive'}

نحوه نمایش ریدایرکت های HTTP با درخواست های پایتون

برای نشان دادن تغییر مسیرهای HTTP که در طول پایتون اتفاق افتاده است get() درخواست کنید، استفاده کنید history ویژگی شی پاسخ. ایجاد یک for حلقه در response.history و دریافت کنید .url و .status_code ویژگی های هر عنصر تاریخ

import requests

url = 'https://crawler-test.com/redirects/redirect_chain_allowed'
r = requests.get(url)

for redirect in r.history:
    print(redirect.url, redirect.status_code)
print(r.url, r.status_code)
https://crawler-test.com/redirects/redirect_chain_allowed 301
https://crawler-test.com/redirects/redirect_chain_disallowed 301
https://crawler-test.com/redirects/redirect_target 200

HTML را با Request و BeautifulSoup تجزیه کنید

سوپ زیبا یک کتابخانه پایتون است که به شما امکان می دهد HTML و XML را تجزیه کنید تا داده ها را از آنها استخراج کنید. BeautifulSoup را می توان برای تجزیه HTML بازگشتی در شی Python Response استفاده کرد.

چگونه شی پاسخ پایتون HTML را برمی گرداند

شی Python Response، HTML را از URL ارسال شده در برمی‌گرداند get() درخواست به صورت یونیکد یا بایت.

قالب متنی HTML برگشتی استخراج اطلاعات از آن را دشوار می کند.

from bs4 import BeautifulSoup
import requests

# Make the request
url = 'https://crawler-test.com/'
r = requests.get(url)

r.text[:500]
'<!DOCTYPE html>\n<html>\n  <head>\n    <title>Crawler Test Site</title>\n    \n      <meta content="en" HTTP-EQUIV="content-language"/>\n         \n    <link type="text/css" href="/css/app.css" rel="stylesheet"/>\n    <link type="image/x-icon" href="/favicon.ico?r=1.6" rel="icon"/>\n    <script type="text/javascript" src="/bower_components/jquery/jquery.min.js"></script>\n    \n      <meta content="Default description XIbwNE7SSUJciq0/Jyty" name="description"/>\n    \n\n    \n        <link rel="alternate" media'

چگونه HTML را با BeautifulSoup تجزیه کنیم

برای تجزیه HTML برگشتی از یک درخواست get()، ویژگی answer.text را به کلاس BeautifulSoup کتابخانه bs4 منتقل کنید. از آرگومان ‘html.parser’ برای تجزیه HTML استفاده کنید.

# Parse the HTML
soup = BeautifulSoup(r.text, 'html.parser')
soup

این یک شی سوپ را برمی گرداند که می توان از آن برای استخراج داده ها از آن استفاده کرد.

<!DOCTYPE html>

<html>
<head>
<title>Crawler Test Site</title>
<meta content="en" http-equiv="content-language"/>
<link href="/css/app.css" rel="stylesheet" type="text/css"/>
...
</html>

اکنون که با BeautifulSoup تجزیه شده است، تفسیر خروجی آسانتر است.

شما می توانید برچسب را با استفاده از find() یا find_all() مواد و روش ها.

خروجی:

<title>Crawler Test Site</title>

خروجی:

[<meta content="en" http-equiv="content-language"/>,
 <meta content="Default description XIbwNE7SSUJciq0/Jyty" name="description"/>,
 <meta content="nositelinkssearchbox" name="google"/>,
 <meta content="0H-EBys8zSFUxmeV9xynoMCMePTzkUEL_lXrm9C4a8A" name="google-site-verification"/>]

یا حتی ویژگی های تگ را انتخاب کنید.

soup.find('meta', attrs={'name':'description'})

خروجی:

<meta content="Default description XIbwNE7SSUJciq0/Jyty" name="description"/>

نحوه دریافت تگ های سئو اصلی از یک صفحه وب

برای استخراج تگ های اصلی SEO از یک صفحه وب، از درخواست ها به همراه کتابخانه تجزیه BeautifulSoup استفاده کنید. متد find() شی سوپ به شما امکان می دهد تگ های HTML مانند H1، عنوان، توضیحات متا و سایر تگ های مهم SEO را استخراج کنید.

from bs4 import BeautifulSoup
import requests

# Make the request
url = 'https://crawler-test.com/'
r = requests.get(url)

# Parse the HTML
soup = BeautifulSoup(r.text, 'html.parser')

# Get the HTML tags
title = soup.find('title')
h1 = soup.find('h1')
description = soup.find('meta', attrs={'name':'description'})
meta_robots =  soup.find('meta', attrs={'name':'robots'})
canonical = soup.find('link', {'rel': 'canonical'})

# Get the text from the HTML tags
title = title.get_text() if title else ''
h1 = h1.get_text() if h1 else ''
description = description['content'] if description else ''
meta_robots =  meta_robots['content'] if meta_robots else ''
canonical = canonical['href'] if canonical else ''

# Print the tags
print('Title: ', title)
print('h1: ', h1)
print('description: ', description)
print('meta_robots: ', meta_robots)
print('canonical: ', canonical)

خروجی:

Title:  Crawler Test Site
h1:  Crawler Test Site
description:  Default description XIbwNE7SSUJciq0/Jyty
meta_robots:  
canonical:  

from bs4 import BeautifulSoup
import requests
from urllib.parse import urljoin

url = 'https://crawler-test.com/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')

links = []
for link in soup.find_all('a', href=True):
    full_url = urljoin(url, link['href']) # join domain to path
    links.append(full_url)

# Show 5 links
links[:5]

خروجی:

['https://crawler-test.com/',
 'https://crawler-test.com/mobile/separate_desktop',
 'https://crawler-test.com/mobile/desktop_with_AMP_as_mobile',
 'https://crawler-test.com/mobile/separate_desktop_with_different_h1',
 'https://crawler-test.com/mobile/separate_desktop_with_different_title']

هدر درخواست های HTTP برای ارسال اطلاعات اضافی با درخواست یا پاسخ HTTP، بدون تغییر رفتار درخواست استفاده می شود. سرصفحه های درخواست به سادگی به درخواست ارسال می شوند.

نحوه اضافه کردن Request Readers به ​​درخواست Python

برای افزودن سرصفحه درخواست به درخواست‌های GET و POST خود، یک فرهنگ لغت را به آن ارسال کنید headers پارامتر از get() و post() مواد و روش ها.

import requests 

url = 'http://httpbin.org/headers'

# Add a custom header to a GET request
r = requests.get(url, headers={"Content-Type":"text"})

# Add a custom header to a POST request
r = requests.post(url, headers={'Authorization' : 'Authorization': 'Bearer {access_token}'})

برای افزودن رمز دسترسی به درخواست پایتون، یک دیکشنری را به آن ارسال کنید params پارامتر از get() درخواست.

import requests 

url = 'http://httpbin.org/headers'

access_token = {
    'Authorization': 'Bearer {access_token}'
    }

r = requests.get(url, headers=access_token)
r.json()
{'headers': {'Accept': '*/*',
  'Accept-Encoding': 'gzip, deflate',
  'Authorization': 'Bearer {access_token}',
  'Host': 'httpbin.org',
  'User-Agent': 'python-requests/2.24.0',
  'X-Amzn-Trace-Id': 'Root=1-615aa0b3-5c680dcb575d50f22e9565eb'}}

پارامترهای رشته پرس و جو

پارامترهای پرس و جو به شما امکان می دهند درخواست پایتون خود را با ارسال مقادیر به پارامترهای رشته پرس و جو سفارشی کنید.

اکثر درخواست های API نیاز به افزودن پارامترهای پرس و جو به درخواست دارند. این مورد در مورد API ویکی پدیا است.

نحوه اضافه کردن پارامترها به URL درخواست پایتون

برای افزودن پارامترهای رشته پرس و جو به درخواست های پایتون، یک فرهنگ لغت از پارامترها را به آن ارسال کنید params بحث و جدل. در اینجا نشانی اینترنتی درخواست به نظر می رسد.

import requests
 
url = 'https://en.wikipedia.org/w/api.php'

params = {
        'action': 'query',
        'format': 'json',
        'titles': 'Requests (software)',
        'prop': 'extracts'
    }
 
response = requests.get(url, params=params)

print('Request URL:', response.url)
# Result
Request URL: https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Requests+%28software%29
data = response.json()
 
page = next(iter(data['query']['pages'].values()))
print(page['extract'][:73])

نحوه رسیدگی به خطاهای استثنا در درخواست ها

برای مقابله با استثناهایی که با استفاده از درخواست‌های پایتون ایجاد می‌شوند، درخواست خود را با عبارت احاطه کنید try و except بیانیه.

import requests

url = 'bad url'

try:
    r = requests.get(url)
except Exception as e:
    print(f'There was an error: {e}')
There was an error: Invalid URL 'bad url': No schema supplied. Perhaps you meant http://bad url?

نحوه تغییر User-Agent در درخواست پایتون

برای تغییر user-agent درخواست پایتون خود، یک دیکشنری را به آن ارسال کنید headers پارامتر از get() درخواست.

import requests 

url = 'https://www.reddit.com/r/python/top.json?limit=1&t=day'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}

r = requests.get(url, headers=headers)

نحوه اضافه کردن Timeout به یک درخواست در پایتون

برای افزودن یک بازه زمانی به درخواست پایتون، یک مقدار شناور به آن ارسال کنید timeout پارامتر از get() درخواست.

import requests

url = 'http://httpbin.org/basic-auth/user/pass'

try:
    r = requests.get(url, timeout=0.1)
except Exception as e:
    print(e)

r.status_code
HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /basic-auth/user/pass (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fb03a7fa290>, 'Connection to httpbin.org timed out. (connect timeout=0.1)'))
401

نحوه استفاده از پروکسی با درخواست های پایتون

برای استفاده از پراکسی ها با درخواست های پایتون، یک دیکشنری را به آن ارسال کنید proxies پارامتر از get() درخواست.

import requests 

url = 'https://crawler-test.com/'

proxies = {
    'http': '128.199.237.57:8080'
}

r = requests.get(url, proxies=proxies)

می‌توانید پروکسی‌های رایگان را از proxyscrape پیدا کنید (ممکن است قبلاً مسدود شده باشند). با این حال، اگر شروع به افزایش مقیاس کنید، به یک سرویس پروکسی ممتاز نیاز خواهید داشت.

جلسات درخواست

درخواست ها Session() شی برای ایجاد درخواست هایی با پارامترهایی استفاده می شود که در تمام درخواست ها در یک جلسه باقی می مانند.

نحوه استفاده از Requests Session Object

# Request Session
import requests
 
url = 'https://httpbin.org/headers'

# Create HTTP Headers
access_token = {
    'Authorization': 'Bearer {access_token}'
    }

with requests.Session() as session:
 
    # Add HTTP Headers to the session
    session.headers.update(access_token)
    
    # Make First Request
    r1 = session.get(url)

    # Make Second Request
    r2 = session.get(url)

    # Show HTTP Headers
    print('r1: ', r1.json()['headers']['Authorization'])
    print('r2: ', r2.json()['headers']['Authorization'])

r1:  Bearer {access_token}
r2:  Bearer {access_token}

چگونه درخواست های ناموفق پایتون را دوباره امتحان کنیم

import requests
from requests.adapters import HTTPAdapter, Retry

s = requests.Session()

retries = Retry(total=3,
                backoff_factor=0.1,
                status_forcelist=[500,502,503,504])
                
s.mount('http://', HTTPAdapter(max_retries=retries))
s.mount('https://', HTTPAdapter(max_retries=retries))


try:
    r = s.get('https://httpstat.us/500')
except Exception as e:
    print(type(e))
    print(e)

سایر روش های HTTP

در بالای GET و POST درخواست، کتابخانه Python اجازه می دهد تا از سایر روش های محبوب HTTP مانند HEAD، PUT، DELETE، PATCH و OPTIONS.

requests.head('https://httpbin.org/get') # Get request HTTP header
requests.put('https://httpbin.org/put', data={'key':'value'})  # Create new resource with payload
requests.delete('https://httpbin.org/delete') # Delete resource
requests.patch('https://httpbin.org/patch', data={'key':'value'}) # Partial modification
requests.options('https://httpbin.org/get') # Specify communication options

کتابخانه درخواست های پایتون چیست؟

کتابخانه درخواست های پایتون که به درخواست های پایتون نیز معروف است، یک کتابخانه HTTP است که به کاربران اجازه می دهد درخواست های HTTP را با استفاده از پایتون ارسال کنند. شعار آن “Python HTTP for Humans” به خوبی نشان دهنده سادگی بسته است.

آموزش با استفاده از Requests

سایر آموزش های خراش دادن وب

حقایقی در مورد درخواست های پایتون

نویسنده درخواست های پایتون کنت رایتز
زبان درخواست پایتون پایتون
روش های درخواست پایتون GET, POST, PUT, DELETE, PATCH, OPTIONs, HEAD
درخواست انتشار پایتون 2011-02-14

روش های درخواست

  • close(): اتصال به سرور را ببندید
  • iter_content(): روی پاسخ تکرار کنید
  • iter_lines(): روی هر خط در پاسخ تکرار کنید
  • json(): شی JSON پاسخ را برگردانید. اگر JSON نباشد، یک خطا برمی‌گرداند
  • raise_for_status(): در صورت بروز خطا، یک شی HTTPError را برگردانید.

درخواست خواص

  • apparent_encoding: رمزگذاری ظاهری را برگردانید
  • محتوا: محتوای پاسخ را بر حسب بایت برگردانید
  • کوکی ها: نشان دادن شی حاوی کوکی های بازگردانده شده توسط سرور
  • سپری شده: زمان سپری شده بین ارسال درخواست در مقابل بازگشت پاسخ
  • رمزگذاری: نمایش رمزگذاری مورد استفاده برای رمزگشایی r.text
  • headers: فرهنگ لغت سرصفحه پاسخ را برگردانید
  • history: فهرستی از اشیاء پاسخ حاوی تاریخچه درخواست را برگردانید
  • is_permanent_redirect: نشان می دهد که آیا URL به طور دائم هدایت می شود
  • is_redirect: نشان می دهد که آیا URL تغییر مسیر داده شده است
  • پیوندها: هدر HTTP پیوندها را برگردانید
  • next: یک شی را برای درخواست بعدی در یک تغییر مسیر برگردانید
  • ok: نشان دهید اگر کد وضعیت کمتر از 400 باشد
  • دلیل: توضیح متنی کد وضعیت
  • درخواست: نمایش شی درخواست درخواست ارسال شده برای یک پاسخ معین
  • status_code: نشان دادن کد وضعیت بازگردانده شده توسط سرور
  • متن: محتوای پاسخ را به صورت یونیکد برگردانید
  • url: نشانی اینترنتی پاسخ را نشان دهید

چه خبر بعدی

نتیجه

اگر به دنبال جایگزینی برای کتابخانه درخواست ها هستید، ممکن است به کتابخانه requests-HTML علاقه مند باشید که برخی از گزینه های تجزیه داخلی HTML را ارائه می دهد.

این کتابخانه نه تنها برای اسکرپینگ وب مفید است، بلکه برای توسعه وب و هر تلاش دیگری که از API استفاده می کند نیز مفید است.

اکنون مقدمه کتابخانه درخواست‌های پایتون را به پایان می‌رسانیم.

سئو PBN | خبر های جدید سئو و هک و سرور