Conas íomhánna a scrape ó íomhánna yahoo ag úsáid Python

Tuairimí: 0

Tá sé tábhachtach íomhánna a scríobadh ó Yahoo Image Search nuair a bhíonn tacair sonraí íomhá á nginiúint. Míníonn an treoir seo conas íomhánna a scrape ó Yahoo Image Search ag baint úsáide as Python chomh maith le leabharlann iarratais i gcomhar le LXML le haghaidh teicnící parsála HTML. Baineann sé freisin le húsáid seachfhreastalaí chun nach n -éireoidh leis na córais bhrath Yahoo bot a bheith gafa.

Uirlisí agus leabharlanna riachtanacha riachtanacha

Chun íomhánna a scrape ó Yahoo Images, beidh na leabharlanna Python seo a leanas de dhíth ort:

  • Requests: Chun iarratais HTTP a dhéanamh.
  • LXML: Le haghaidh parsáil html.
  • Proxies: Chun toirmisc IP a sheachaint le linn scríobadh fairsing.

Leabharlanna tríú páirtí a shuiteáil

Cinntigh go bhfuil na leabharlanna riachtanacha go léir suiteáilte agat. Suiteáil iad ag úsáid Pip:

pip install requests
pip install lxml

Nó ordú amháin a úsáid:

pip install requests lxml

Treoir Céim ar Chéim maidir le Scrapáil le Python

Ar an gcéad dul síos, ní mór dúinn na leabharlanna riachtanacha a allmhairiú dár scraper.

import requests
from lxml import html

Déan cuardach íomhánna Yahoo

Ansin, déanfaimid cuardach ar íomhánna Yahoo.

Anseo sainmhíneoimid ceist chuardaigh mar choileáin agus seolfaimid iarratas GET chuig cuardach íomhánna Yahoo leis na ceanntásca riachtanacha. Tá na ceanntásca iarratais tábhachtach chun iarratas ar bhrabhsálaí a aithris, rud a chabhraíonn le roinnt meicníochtaí braite bot a sheachaint.

#Sainmhínigh ceanntásca chun iarratas ar bhrabhsálaí a aithris
headers = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "accept-language": "en-IN,en;q=0.9",
    "cache-control": "max-age=0",
    "dnt": "1",
    "priority": "u=0, i",
    "sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": '"Linux"',
    "sec-fetch-dest": "document",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "none",
    "sec-fetch-user": "?1",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
}

# Sainmhínigh an cheist cuardaigh
search_query = "puppies"

# Déan iarratas ar an leathanach cuardaigh íomhánna yahoo
response = requests.get(
    url=f"https://images.search.yahoo.com/search/images?p={search_query}",
    headers=headers
)

URLS Íomhá Parse le LXML

Tar éis an freagra a fháil ó Yahoo, ní mór dúinn an HTML a pharsáil chun URLanna íomhá a bhaint. Bainimid úsáid as LXML chun na críche seo.

# Parse an freagra HTML
parser = fromstring(response.text)

# Sliocht URLanna íomhá ag baint úsáide as xpath
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")

Baintear úsáid as feidhm asstring chun an téacs freagartha HTML a pharsáil. Úsáidtear XPath chun URLanna íomhánna a bhaint. Taispeánann an screenshot thíos conas a fuarthas an XPath.

yaho.png

Íoslódáil na híomhánna

Le liosta na n -URLanna íomhá, ní mór dúinn gach íomhá a íoslódáil anois.

Anseo, déanfaimid lúb tríd an liosta Images_URLS chun an comhaireamh (innéacs) agus an URL (seoladh) a bhaint. Déanfar gach íomhá a íoslódáil ansin trí iarratas GET a sheoladh chuig an URL faoi seach.

# Íoslódáil gach íomhá agus sábháil é i gcomhad
for count, url in enumerate(images_urls):
    response = requests.get(url=url, headers=headers)

Ag sábháil na n -íomhánna

Ar deireadh, sábhálaimid na híomhánna íoslódáilte chuig an gcóras comhaid áitiúil. Sainmhínímid feidhm download_file a dhéileálann leis an bpróiseas sábhála comhaid.

Tógann an fheidhm seo an comhaireamh (chun ainmneacha uathúla a chruthú) agus an freagra (ina bhfuil na sonraí íomhá). Cinneann sé an síneadh comhaid ón gceanntásc de chineál ábhair agus sábhálann sé an comhad san eolaire ./images/.

def download_file(count, response):
    # Faigh an síneadh comhaid ón gceanntásc de chineál ábhair
    extension = response.headers.get("Content-Type").split("/")[1]
    filename = "./images/" + str(count) + f".{extension}"

    # Cruthaigh an t -eolaire mura bhfuil sé ann
    os.makedirs(os.path.dirname(filename), exist_ok=True)

    # Scríobh an t -ábhar freagartha don chomhad
    with open(filename, "wb") as f:
        f.write(response.content)

Trí ghlaoch a chur ar an bhfeidhm seo laistigh den lúb, sábhálaimid gach íomhá íoslódáilte:

for count, url in enumerate(images_urls):
    response = requests.get(url=url, headers=headers)
    download_file(count, response)

Meicníochtaí Braite Bot Yahoo

Agus sonraí á scríobadh ó Yahoo, tá sé tábhachtach a bheith ar an eolas faoi mheicníochtaí braite bot Yahoo. Baineann Yahoo úsáid as na teicnící seo go príomha chun róbónna uathoibrithe a aithint agus a bhlocáil:

  • Ráta IP ag Teorannú: Déanann Yahoo monatóireacht ar ráta na n -iarratas a thagann ó sheoladh IP amháin. Is féidir le hiarratais iomarcacha ó IP amháin toirmisc shealadacha nó bhuana a bheith mar thoradh air.
  • Captchas: Is féidir le Yahoo Captchas a chur i bhfeidhm d'úsáideoirí chun a fhíorú go bhfuil siad daonna.

Ag baint úsáide as seachvótálaithe chun braite a sheachaint

Chun nach gcuirfeadh meicníocht bhrath Yahoo bot bac air, go háirithe nuair a bhíonn iliarrataí á ndéanamh ón IP céanna, bainimid úsáid as seachvótálaithe chun ár seoladh IP a mhaolú.

Tríd ár n -iarratais a ródú trí sheachvótálaithe éagsúla, is féidir linn ár ngníomhaíocht scríobtha a dháileadh ar fud ilsheoltaí IP, agus mar sin laghdaítear an dóchúlacht atá á bhrath.

proxies = {
    'http': 'http://USER:PASS@HOST:PORT',
    'https': 'http://USER:PASS@HOST:PORT'
}
response = requests.get(url, headers=headers, proxies=proxies, verify=False)

Cód Comhlánaithe

Seo an script iomlán chun íomhánna a scríobadh ó thorthaí cuardaigh íomhánna yahoo ag baint úsáide as seachvótálaithe:

import os
import requests
from lxml.html import fromstring


def download_file(count, response):
    """
    Sábhálann ábhar freagra ar chomhad san eolaire ./images/.

    Args:
        count (int): Aitheantóir uathúil don chomhad.
        response (requests.Response): An freagra HTTP ina bhfuil an t -ábhar comhaid.

    """
    # Faigh an síneadh comhaid ón gceanntásc de chineál ábhair
    extension = response.headers.get("Content-Type").split("/")[1]
    filename = "./images/" + str(count) + f".{extension}"

    # Cruthaigh an t -eolaire mura bhfuil sé ann
    os.makedirs(os.path.dirname(filename), exist_ok=True)

    # Scríobh an t -ábhar freagartha don chomhad
    with open(filename, "wb") as f:
        f.write(response.content)


def main():
    """
    An phríomhfheidhm chun íomhánna a chuardach agus iad a íoslódáil.

    Feidhmíonn an fheidhm seo na céimeanna seo a leanas:
    1. Socraíonn sé na ceanntásca iarratais.
    2. Cuardaigh le haghaidh íomhánna de choileáin ar Yahoo.
    3. Déanann sé an freagra HTML a pharsáil chun URLanna íomhá a bhaint.
    4. Íoslódáil gach íomhá agus sábhálann sé é chuig an eolaire ./images/.

    """
    # Sainmhínigh ceanntásca chun iarratas ar bhrabhsálaí a aithris
    headers = {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language": "en-IN,en;q=0.9",
        "cache-control": "max-age=0",
        "dnt": "1",
        "priority": "u=0, i",
        "sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Linux"',
        "sec-fetch-dest": "document",
        "sec-fetch-mode": "navigate",
        "sec-fetch-site": "none",
        "sec-fetch-user": "?1",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    }

    # Sainmhínigh seachvótálaithe chun teorannú ráta a sheachbhóthar
    proxies = {"http": "http://USER:PASS@HOST:PORT", "https": "http://USER:PASS@HOST:PORT"}

    # Sainmhínigh an cheist cuardaigh
    search_query = "puppies"

    # Déan iarratas ar an leathanach cuardaigh íomhánna yahoo
    response = requests.get(
        url=f"https://images.search.yahoo.com/search/images?p={search_query}",
        headers=headers,
        proxies=proxies,
        verify=False
    )

    # Parse an freagra HTML
    parser = fromstring(response.text)

    # Sliocht URLanna íomhá ag baint úsáide as xpath
    images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")

    # Íoslódáil gach íomhá agus sábháil é i gcomhad
    for count, url in enumerate(images_urls):
        response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
        download_file(count, response)


if __name__ == "__main__":
    main()

Is teicníc chumhachtach é íomhánna a scríobadh ó Yahoo Image Search ag baint úsáide as Python chun tascanna bailithe agus anailíse sonraí a uathoibriú. Trí úsáid a bhaint as an leabharlann iarratais le haghaidh iarrataí HTTP agus an leabharlann LXML le haghaidh parsáil HTML, is féidir leat URLanna íomhá a bhaint go héifeachtach agus na híomhánna a íoslódáil. Cuidíonn ionchorprú seachvótálaithe leat cosc ​​a chur ar thoirmisc IP a bhrath agus a chosc le linn gníomhaíochtaí scríobtha fairsinge.

Tuairimí:

0 tuairimí