Conas Yelp a scrape ag baint úsáide as Python

Tuairimí: 0

Is féidir le sonraí a scríobadh ó Yelp léargas luachmhar a sholáthar ar bhialanna áitiúla, lena n -áirítear sonraí mar ainm, URL, ealaín, agus rátálacha. Ag baint úsáide as na hiarratais agus na leabharlanna LXML Python, taispeánfaidh an rang teagaisc seo conas torthaí cuardaigh Yelp a scrape. Clúdófar roinnt teicnící lena n -áirítear proxies a úsáid, ceanntásca a láimhseáil agus sonraí a bhaint le XPath.

Céim 1: An timpeallacht a chur ar bun

Sula dtosaíonn tú ar an bpróiseas scríobtha, cinntigh go bhfuil python suiteáilte agat agus na leabharlanna riachtanacha:

pip install requests
pip install lxml

Cuideoidh na leabharlanna seo linn iarratais HTTP a sheoladh chuig Yelp, an t -ábhar HTML a pharsáil, agus na sonraí a theastaíonn uainn a bhaint.

Céim 2: Iarratas a sheoladh chuig Yelp

Ar an gcéad dul síos, ní mór dúinn iarratas GET a sheoladh chuig an leathanach Torthaí Cuardaigh Yelp chun an t -ábhar HTML a fháil. Seo conas é a dhéanamh:

import requests

# URL Leathanach Cuardaigh Yelp
url = "https://www.yelp.com/search?find_desc=restaurants&find_loc=San+Francisco%2C+CA"

# Seol iarratas GET chun an t -ábhar HTML a fháil
response = requests.get(url)

# Seiceáil an raibh an t -iarratas rathúil
if response.status_code == 200:
    print("Successfully fetched the page content")
else:
    print("Failed to retrieve the page content")

Tuiscint ar cheanntásca http

Agus iarratais á ndéanamh agat ar shuíomh gréasáin, tá sé riachtanach na ceanntásca cuí HTTP a chur san áireamh. Is féidir le ceanntásca meiteashonraí a bheith ann faoin iarraidh, mar shampla an gníomhaire úsáideora, a aithníonn an brabhsálaí nó an uirlis a dhéanann an t -iarratas. Is féidir leis na ceanntásca seo a chur san áireamh cabhrú le blocáil nó le sceitheadh ​​a sheachaint ag an Láithreán Gréasáin Sprioc.

Seo an chaoi ar féidir leat ceanntásca a chur ar bun:

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': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
    '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/127.0.0.0 Safari/537.36',
}

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

Rothlú seachfhreastalaí a chur i bhfeidhm

Agus méid mór leathanach á scríobadh agat, tá baol ann go gcuirfidh an sprioc -láithreán bac ar do sheoladh IP. Chun é seo a chosc, moltar úsáid a bhaint as seachfhreastalaithe. Maidir leis an treoir seo, tá sé inmholta freastalaithe seachfhreastalaí dinimiciúla a úsáid a bhfuil uainíocht uathoibríoch iontu. Sa tslí seo, ní gá duit ach na socruithe seachfhreastalaí a chur ar bun uair amháin, agus cabhróidh an uainíocht le rochtain a choinneáil tríd an seoladh IP a athrú go tréimhsiúil, ag laghdú an dóchúlacht go gcuirfear bac air.

proxies = {
    'http': 'http://username:password@proxy-server:port',
    'https': 'https://username:password@proxy-server:port'
}

response = requests.get(url, headers=headers, proxies=proxies)

Céim 3: An t -ábhar HTML a pharsáil le LXML

Nuair a bheidh an t -ábhar HTML againn, is é an chéad chéim eile é a pharsáil agus na sonraí ábhartha a bhaint. Bainfimid úsáid as an leabharlann LXML chun na críche seo.

from lxml import html

# Parse an t -ábhar HTML ag úsáid LXML
parser = html.fromstring(response.content)

Na heilimintí a aithint le scrape

Ní mór dúinn díriú ar na liostaí bialainne aonair ar an leathanach Torthaí Cuardaigh. Is féidir na heilimintí seo a aithint ag baint úsáide as abairtí XPath. I gcás Yelp, is iondúil go ndéantar na liostaí a fhilleadh i ngné div le tréith shonrach sonraí sonraí.

# Eilimintí bialainne aonair a bhaint
elements = parser.xpath('//div[@data-testid="serp-ia-card"]')[2:-1]

Ag baint úsáide as xpath le haghaidh eastóscadh sonraí

Is uirlis chumhachtach é XPath chun nóid a nascleanúint agus a roghnú ó dhoiciméad HTML. Sa rang teagaisc seo, bainfimid úsáid as abairtí XPath chun ainm na bialainne, URL, ealaín, agus rátáil a bhaint as gach gné bialainne.

Seo iad na XPaths sonracha do gach pointe sonraí:

  1. Ainm na bialainne: .//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/text()
  2. Bialann URL: .//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/@href
  3. Ealaín: .//div[@class="priceCategory__09f24___4Wsg iaPriceCategory__09f24__x9YrM y-css-2hdccn"]/div/div/div/a/button/span/text()
  4. É féin: .//div[@class="y-css-9tnml4"]/@aria-label

Céim 4: Sonraí a bhaint as gach liostáil bialainne

Anois go bhfuil an t -ábhar HTML againn agus go bhfuil blocáil IP ionchasach againn, is féidir linn na sonraí riachtanacha a bhaint as gach liostáil bialainne.

restaurants_data = []

# Iterate thar gach gné bialainne
for element in elements:
    # Sliocht ainm na bialainne
    name = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/text()')[0]

    # Sliocht URL na Bialann
    url = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/@href')[0]

    # Sliocht na cuisines
    cuisines = element.xpath('.//div[@class="priceCategory__09f24___4Wsg iaPriceCategory__09f24__x9YrM y-css-2hdccn"]/div/div/div/a/button/span/text()')

    # Sliocht an rátáil
    rating = element.xpath('.//div[@class="y-css-9tnml4"]/@aria-label')[0]

    # Cruthaigh foclóir chun na sonraí a stóráil
    restaurant_info = {
        "name": name,
        "url": url,
        "cuisines": cuisines,
        "rating": rating
    }

    # Cuir an t -eolas bialainne leis an liosta
    restaurants_data.append(restaurant_info)

Céim 5: Na sonraí a shábháil mar json

Tar éis na sonraí a bhaint amach, ní mór dúinn é a shábháil i bhformáid struchtúrtha. Is formáid a úsáidtear go forleathan é JSON chun na críche seo.

import json

# Sábháil na sonraí chuig comhad JSON
with open('yelp_restaurants.json', 'w') as f:
    json.dump(restaurants_data, f, indent=4)

print("Data extraction complete. Saved to yelp_restaurants.json")

Cód iomlán

import requests
from lxml import html
import json

# URL Leathanach Cuardaigh Yelp
url = "https://www.yelp.com/search?find_desc=restaurants&find_loc=San+Francisco%2C+CA"

# Ceanntásca a chur ar bun chun aithris a dhéanamh ar iarratas brabhsálaí
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.5'
}

# Seachvótálaithe a bhunú más gá
proxies = {
    'http': 'http://username:password@proxy-server:port',
    'https': 'https://username:password@proxy-server:port'
}

# Seol iarratas GET chun an t -ábhar HTML a fháil
response = requests.get(url, headers=headers, proxies=proxies)

# Seiceáil an raibh an t -iarratas rathúil
if response.status_code == 200:
    print("Successfully fetched the page content")
else:
    print("Failed to retrieve the page content")

# Parse an t -ábhar HTML ag úsáid LXML
parser = html.fromstring(response.content)

# Eilimintí bialainne aonair a bhaint
elements = parser.xpath('//div[@data-testid="serp-ia-card"]')[2:-1]

# Tús a chur le liosta chun na sonraí eastósctha a choinneáil
restaurants_data = []

# Iterate thar gach gné bialainne
for element in elements:
    # Sliocht ainm na bialainne
    name = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/text()')[0]

    # Sliocht URL na Bialann
    url = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/@href')[0]

    # Sliocht na cuisines
    cuisines = element.xpath('.//div[@class="priceCategory__09f24___4Wsg iaPriceCategory__09f24__x9YrM y-css-2hdccn"]/div/div/div/a/button/span/text()')

    # Sliocht an rátáil
    rating = element.xpath('.//div[@class="y-css-9tnml4"]/@aria-label')[0]

    # Cruthaigh foclóir chun na sonraí a stóráil
    restaurant_info = {
        "name": name,
        "url": url,
        "cuisines": cuisines,
        "rating": rating
    }

    # Cuir an t -eolas bialainne leis an liosta
    restaurants_data.append(restaurant_info)

# Sábháil na sonraí chuig comhad JSON
with open('yelp_restaurants.json', 'w') as f:
    json.dump(restaurants_data, f, indent=4)

print("Data extraction complete. Saved to yelp_restaurants.json")

Tá sé ríthábhachtach d'úsáideoirí ceanntásca HTTP a chumrú i gceart agus úsáid a bhaint as seachvótálaithe chun dul timpeall ar shrianta agus blocáil a sheachaint. Le haghaidh taithí scríobtha optamaithe agus níos sábháilte, smaoinigh ar uathoibriú IP a uathoibriú. Is féidir le seachfhreastalaithe dinimiciúla cónaithe nó soghluaiste a fhostú an próiseas seo a fheabhsú go mór, rud a laghdófar an dóchúlacht go mbraithfear agus go gcuirfí bac air.

Tuairimí:

0 tuairimí