Is éard atá i gceist le scríobadh gréasáin ná sonraí a bhaint as láithreáin ghréasáin le haghaidh tascanna mar anailís sonraí, taighde, agus uathoibriú. Cé go dtugann Python leabharlanna chun iarratais HTTPS a sheoladh agus scríobadh a dhéanamh, is féidir le CURL trí Pycurl a bheith níos éifeachtaí. Sa rang teagaisc seo, taispeánfaimid conas python Curl a úsáid chun leathanaigh ghréasáin a scrape. Cuirfimid samplaí ar fáil agus déanfaimid comparáid idir a fheidhmíocht le leabharlanna coitianta eile ar nós iarratais, httpx, agus AiOHTTP.
Sula dtéann tú isteach i gcomhtháthú Python, tá sé riachtanach bunghnéithe curl a thuiscint. Is féidir leat orduithe CURL a úsáid go díreach sa teirminéal chun tascanna a dhéanamh mar iarratais a dhéanamh agus a phostáil.
Orduithe Curl Sampla:
# GET iarr
curl -X GET "https://httpbin.org/get"
# POST iarr
curl -X POST "https://httpbin.org/post"
Chun Curl a úsáid i Python, teastaíonn an Leabharlann Pycurl uainn, a sholáthraíonn comhéadan Python don leabharlann CURL.
Pycurl a shuiteáil:
pip install pycurl
Tugann Pycurl rialú mionsonraithe ar iarratais HTTP i Python. Anseo thíos tá sampla ag léiriú conas iarratas GET a dhéanamh le Pycurl:
import pycurl
import certifi
from io import BytesIO
# Cruthaigh réad Bytesio chun na sonraí freagartha a choinneáil
buffer = BytesIO()
# Tús a chur le réad curl
c = pycurl.Curl()
# Socraigh an URL don iarratas HTTP GET
c.setopt(c.URL, 'https://httpbin.org/get')
# Socraigh an maolán chun na sonraí aschuir a ghabháil
c.setopt(c.WRITEDATA, buffer)
# Socraigh an cosán go dtí an comhad cuachta CA le haghaidh fíorú SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# An t -iarratas HTTP a chomhlíonadh
c.perform()
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
# Aisghabháil ábhar an fhreagra ón maolán
body = buffer.getvalue()
# An comhlacht freagartha a dhíchódú agus a phriontáil
print(body.decode('iso-8859-1'))
Tá sé coitianta sonraí a sheoladh le hiarratais poist. Le Pycurl, bain úsáid as an rogha postfields. Seo sampla d'iarratas poist a dhéanamh le Pycurl:
import pycurl
import certifi
from io import BytesIO
# Cruthaigh réad Bytesio chun na sonraí freagartha a choinneáil
buffer = BytesIO()
# Tús a chur le réad curl
c = pycurl.Curl()
# Socraigh an URL don iarratas ar phost HTTP
c.setopt(c.URL, 'https://httpbin.org/post')
# Socraigh na sonraí atá le cur sa phost
post_data = 'param1="pycurl"¶m2=article'
c.setopt(c.POSTFIELDS, post_data)
# Socraigh an maolán chun na sonraí aschuir a ghabháil
c.setopt(c.WRITEDATA, buffer)
# Socraigh an cosán go dtí an comhad cuachta CA le haghaidh fíorú SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# An t -iarratas HTTP a chomhlíonadh
c.perform()
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
# Aisghabháil ábhar an fhreagra ón maolán
body = buffer.getvalue()
# An comhlacht freagartha a dhíchódú agus a phriontáil
print(body.decode('iso-8859-1'))
Is minic a theastaíonn ceanntásca saincheaptha nó fíordheimhniú le hiarratais HTTP. Anseo thíos tá sampla de cheanntásca saincheaptha a leagan síos le Pycurl:
import pycurl
import certifi
from io import BytesIO
# Cruthaigh réad Bytesio chun na sonraí freagartha a choinneáil
buffer = BytesIO()
# Tús a chur le réad curl
c = pycurl.Curl()
# Socraigh an URL don iarratas HTTP GET
c.setopt(c.URL, 'https://httpbin.org/get')
# Socraigh ceanntásca saincheaptha HTTP
c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json'])
# Socraigh an maolán chun na sonraí aschuir a ghabháil
c.setopt(c.WRITEDATA, buffer)
# Socraigh an cosán go dtí an comhad cuachta CA le haghaidh fíorú SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# An t -iarratas HTTP a chomhlíonadh
c.perform()
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
# Aisghabháil ábhar an fhreagra ón maolán
body = buffer.getvalue()
# An comhlacht freagartha a dhíchódú agus a phriontáil
print(body.decode('iso-8859-1'))
Tá sé ríthábhachtach freagairtí XML a pharsáil agus a láimhseáil agus tú ag obair le APIs. Anseo thíos tá sampla de láimhseáil freagairtí XML le Pycurl:
# Iompórtáil na leabharlanna riachtanacha
import pycurl # Leabharlann chun iarratais HTTP a dhéanamh
import certifi # Leabharlann le haghaidh Fíorú Teastais SSL
from io import BytesIO # Leabharlann chun sruthanna beart a láimhseáil
import xml.etree.ElementTree as ET # Leabharlann chun XML a pharsáil
# Cruthaigh maolán chun na sonraí freagartha a choinneáil
buffer = BytesIO()
# Tús a chur le réad curl
c = pycurl.Curl()
# Socraigh an URL don iarratas HTTP GET
c.setopt(c.URL, 'https://www.google.com/sitemap.xml')
# Socraigh an maolán chun na sonraí aschuir a ghabháil
c.setopt(c.WRITEDATA, buffer)
# Socraigh an cosán go dtí an comhad cuachta CA le haghaidh fíorú SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# An t -iarratas HTTP a chomhlíonadh
c.perform()
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
# Aisghabháil ábhar an fhreagra ón maolán
body = buffer.getvalue()
# Parse an t -ábhar XML i réad ElementTree
root = ET.fromstring(body.decode('utf-8'))
# Priontáil an chlib agus na tréithe den fhréamh -eilimint den chrann XML
print(root.tag, root.attrib)
Tá láimhseáil láidir earráide riachtanach chun iarratais iontaofa HTTP a dhéanamh. Anseo thíos tá sampla de láimhseáil earráide le pycurl:
import pycurl # Iompórtáil an Leabharlann Pycurl
import certifi # Iompórtáil an Leabharlann Certifi
from io import BytesIO # Allmhairiú bytesio chun sruthanna beart a láimhseáil
# Tús a chur le réad curl
c = pycurl.Curl()
buffer = BytesIO()
# Socraigh an URL don iarratas HTTP
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# An t -iarratas HTTP a chomhlíonadh
c.perform()
except pycurl.error as e:
# Má tharlaíonn earráid le linn na hiarrata, gabh an eisceacht pycurl.error
errno, errstr = e.args # Aisghabháil an uimhir earráide agus an teachtaireacht earráide
print(f'Error: {errstr} (errno {errno})') # Priontáil an teachtaireacht earráide agus an uimhir earráide
finally:
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # An comhlacht freagartha a dhíchódú agus a phriontáil
Athraíonn an cód ceartaithe an URL go https://example.com, ag réiteach an tsaincheist prótacail. Déanann sé athrá ar an bpróiseas chun an t -iarratas a chumrú, é a dhéanamh, agus earráidí a láimhseáil mar atá sa chéad bhlúire. Ar fhorghníomhú rathúil, déantar an comhlacht freagartha a dhíchódú agus a phriontáil arís. Léiríonn na blúirí seo an tábhacht a bhaineann le cumraíocht URL chuí agus láimhseáil earráidí láidre in iarratais HTTP le Pycurl.
import pycurl #Iompórtáil an Leabharlann Pycurl
import certifi #Iompórtáil an Leabharlann Certifi
from io import BytesIO # Allmhairiú bytesio chun sruthanna beart a láimhseáil
# Reinitialize the Curl object
c = pycurl.Curl()
buffer = BytesIO()
# Ceartaigh an URL chun https a úsáid
c.setopt(c.URL, 'https://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# An t -iarratas ceartaithe HTTP a chomhlíonadh
c.perform()
except pycurl.error as e:
# Má tharlaíonn earráid le linn na hiarrata, gabh an eisceacht pycurl.error
errno, errstr = e.args # Aisghabháil an uimhir earráide agus an teachtaireacht earráide
print(f'Error: {errstr} (errno {errno})') # Priontáil an teachtaireacht earráide agus an uimhir earráide
finally:
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # An comhlacht freagartha a dhíchódú agus a phriontáil
Soláthraíonn CURL go leor roghanna ardleibhéil chun iompar iarratais HTTP a rialú, mar shampla fianáin agus amanna a láimhseáil. Anseo thíos tá sampla a léiríonn ardroghanna le Pycurl.
import pycurl # Iompórtáil an Leabharlann Pycurl
import certifi # Iompórtáil an Leabharlann Certifi le haghaidh Fíorú Teastais SSL
from io import BytesIO # Allmhairiú bytesio chun sruthanna beart a láimhseáil
# Cruthaigh maolán chun na sonraí freagartha a choinneáil
buffer = BytesIO()
# Tús a chur le réad curl
c = pycurl.Curl()
# Socraigh an URL don iarratas HTTP
c.setopt(c.URL, 'http://httpbin.org/cookies')
# Cumasaigh fianáin trí phéire sainiúil luach-luach a shocrú
c.setopt(c.COOKIE, 'cookies_key=cookie_value')
# Socraigh am ama de 30 soicind don iarratas
c.setopt(c.TIMEOUT, 30)
# Socraigh an maolán chun na sonraí aschuir a ghabháil
c.setopt(c.WRITEDATA, buffer)
# Socraigh an cosán go dtí an comhad cuachta CA le haghaidh fíorú SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# An t -iarratas HTTP a chomhlíonadh
c.perform()
# Dún an réad CURL chun acmhainní a shaoradh
c.close()
# Aisghabháil ábhar an fhreagra ón maolán
body = buffer.getvalue()
# Déan an comhlacht freagartha a dhíchódú ag baint úsáide as ionchódú UTF-8 agus é a phriontáil
print(body.decode('utf-8'))
Nuair a bhíonn tú ag obair le hiarratais HTTP i Python, tá ceithre leabharlann tóir Pycurl, iarratais, HTTPX, agus AIOHTTP. Tá láidreachtaí agus laigí ag gach ceann acu. Seo comparáid chun cabhrú leat an uirlis cheart a roghnú do do chuid riachtanas:
Príomhscannán | PycURL | Requests | HTTPX | AIOHTTP |
---|---|---|---|---|
Éascaíocht úsáide | Measartha | An -éasca | Gan dabht ar bith | Measartha |
Feidhmíocht | In airde | Measartha | In airde | In airde |
Tacaíocht asynchronous | Ar bith | Ar bith | Tá | Tá |
Streaming | Tá | Áirithe | Tá | Tá |
Tacaíocht prótacail | Fairsing (tacaíonn sé le go leor prótacal) | HTTP/HTTPS | HTTP/HTTPS, HTTP/2, WebSockets | HTTP/HTTPS, WebSockets |
Tugann an anailís chomparáideach le fios go dtugann Pycurl ardfheidhmíocht agus solúbthacht, rud a chiallaíonn go bhfuil sé oiriúnach d'úsáideoirí ardleibhéil a dteastaíonn bainistiú mionsonraithe ar iarratais HTTP uathu. Ar an láimh eile, tá iarratais agus HTTPX níos oiriúnaí do chásanna níos simplí, níos iomasach. Seasann AiOHTTP amach i láimhseáil tascanna neamhghnácha, ag soláthar uirlisí éifeachtacha chun iarratais neamhghnácha a bhainistiú.
Braitheann rogha na leabharlainne ceart ar riachtanais agus ar riachtanais shonracha do thionscadail, agus is rogha iontach é Pycurl dóibh siúd a bhfuil luas agus ardchumais ag teastáil uathu.
Tuairimí: 0