Conas sonraí Booking.com a scrape ag baint úsáide as Python

Tuairimí: 0

San alt seo, taispeánfaimid conas sonraí a bhailiú ó shuíomh gréasáin Booking.com le Python. Gheobhaidh muid faisnéis lena n -áirítear, ach gan a bheith teoranta dóibh, ainmneacha óstáin, rátálacha, praghsanna, seoltaí suímh agus a gcuid tuairiscí. Ligeann an cód a chuirtear ar fáil duit sonraí a aisghabháil ó leathanaigh óstáin trí ábhar HTML a pharsáil agus sonraí JSON leabaithe a bhaint amach.

Leabharlanna riachtanacha a shuiteáil

Sula rithfidh tú an cód chun sonraí a scrape ó Booking.com, beidh ort na leabharlanna Python riachtanacha a shuiteáil. Seo conas is féidir leat na spleáchais riachtanacha a shuiteáil:

  1. Requests Leabharlann: Úsáidtear é seo chun iarratais HTTP a sheoladh chuig an Láithreán Gréasáin agus chun ábhar HTML na leathanach a fháil.
  2. LXML Leabharlann: Úsáidtear é seo chun an t -ábhar HTML a pharsáil agus chun sonraí a bhaint as XPath.
  3. JSON: Modúl Python tógtha a úsáidtear chun sonraí JSON a láimhseáil.
  4. CSV: Modúl Python tógtha a úsáidtear chun sonraí scríobtha a scríobh isteach i gcomhad CSV.

Chun na leabharlanna riachtanacha a shuiteáil, is féidir leat Pip a úsáid:


pip install requests lxml

Is iad seo an t-aon leabharlanna seachtracha a theastaíonn uait, agus tagann an chuid eile (JSON, CSV) le Python roimh ré.

An URL agus an struchtúr sonraí a thuiscint

Agus sonraí á scríobadh ó Booking.com, tá sé tábhachtach struchtúr an leathanaigh ghréasáin a thuiscint agus an cineál sonraí is mian leat a bhaint. Tá sonraí struchtúrtha leabaithe i ngach leathanach óstáin ar Booking.com i bhfoirm JSON-LD, formáid a cheadaíonn go n-eastóscófar sonraí mar ainm, suíomh, agus praghsáil. Beimid ag scríobadh na sonraí seo.

Próiseas scríobála céim ar chéim

Ós rud é gur suíomh dinimiciúil é Booking.com agus go gcuireann sé bearta i bhfeidhm chun dul i ngleic le gníomhartha uathoibrithe, bainfimid úsáid as ceanntásca cuí HTTP agus seachvótálaithe chun scríobadh gan uaim a chinntiú gan an baol go gcuirfí bac air.

Iarratais HTTP a sheoladh le ceanntásca

Déanann ceanntásca aithris ar sheisiún úsáideora i mbrabhsálaí agus cosc ​​a chur ar bhrath trí chórais fhrith-scrapála Booking.com. Gan ceanntásca cumraithe i gceart, is féidir leis an bhfreastalaí scripteanna uathoibrithe a aithint go héasca, a bhféadfadh dúshláin blocáil IP nó dúshláin Captcha a bheith mar thoradh orthu.

Chun nach gcuirfí bac ar mheicníochtaí frith-scrapála Booking.com, bainfimid úsáid as ceanntásca saincheaptha chun úsáideoir dlisteanach a bhrabhsáil ag brabhsáil an láithreáin ghréasáin. Seo an chaoi ar féidir leat iarratas HTTP a sheoladh le ceanntásca cuí:


import requests
from lxml.html import fromstring

urls_list = ["https links"]

for url in urls_list:
    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': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        '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/130.0.0.0 Safari/537.36',
    }

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

Tábhacht Proxies

Tá gá le húsáid seachvótálaithe nuair a scríobann tú suíomhanna cosúil le Booking.com, a chuireann teorainneacha ráta iarratais dian i bhfeidhm nó a rianaíonn seoltaí IP. Cabhraíonn seachvótálaithe le hualach na n -iarratas a dháileadh ar fud seoltaí éagsúla IP, ag cosc ​​bloic. Chun na críche seo, is féidir úsáid a bhaint as seachvótálaithe saor in aisce agus seirbhísí seachfhreastalaí íoctha le fíordheimhniú de réir ainm úsáideora agus pasfhocal nó seoladh IP. Mar shampla, bainimid úsáid as an rogha dheireanach.


proxies = {
    'http': '',
    'https': ''
}
response = requests.get(url, headers=headers, proxies=proxies)

An HTML a pharsáil agus sonraí JSON a bhaint

Tar éis an t-iarratas a sheoladh, déanaimid an t-ábhar HTML a pharsáil ag baint úsáide as LXML chun na sonraí leabaithe JSON-LD a aimsiú ina bhfuil sonraí óstáin. Baineann an chéim seo na sonraí struchtúrtha ón leathanach gréasáin lena n -áirítear ainmneacha óstáin, praghsanna, suíomhanna, agus níos mó.


parser = fromstring(response.text)

# Sliocht Sonraí JSON leabaithe
embeded_jsons = parser.xpath('//script[@type="application/ld+json"]/text()')
json_data = json.loads(embeded_jsons[0])

Faisnéis óstáin a bhaint as

Nuair a bheidh na sonraí JSON parsáilte againn, is féidir linn réimsí ábhartha a bhaint as ainm óstáin, seoladh, rátáil, agus praghsáil. Anseo thíos tá an cód chun faisnéis óstáin a bhaint as an JSON:


name = json_data['name']
location = json_data['hasMap']
priceRange = json_data['priceRange']
description = json_data['description']
url = json_data['url']
ratingValue = json_data['aggregateRating']['ratingValue']
reviewCount = json_data['aggregateRating']['reviewCount']
type_ = json_data['@type']
postalCode = json_data['address']['postalCode']
addressLocality = json_data['address']['addressLocality']
addressCountry = json_data['address']['addressCountry']
addressRegion = json_data['address']['addressRegion']
streetAddress = json_data['address']['streetAddress']
image_url = json_data['image']
room_types = parser.xpath("//a[contains(@href, '#RD')]/span/text()")

# Cuir na sonraí ar an liosta ALL_DATA
all_data.append({
    "Name": name,
    "Location": location,
    "Price Range": priceRange,
    "Rating": ratingValue,
    "Review Count": reviewCount,
    "Type": type_,
    "Postal Code": postalCode,
    "Address Locality": addressLocality,
    "Country": addressCountry,
    "Region": addressRegion,
    "Street Address": streetAddress,
    "URL": url,
    "Image URL": image_url,
    "Room Types": room_types
})

Na sonraí a shábháil ar CSV

Nuair a bheidh na sonraí bainte amach, is féidir linn é a shábháil i gcomhad CSV le haghaidh anailíse breise:


# Tar éis gach URL a phróiseáil, scríobh na sonraí i gcomhad CSV
with open('booking_data.csv', 'w', newline='') as csvfile:
    fieldnames = ["Name", "Location", "Price Range", "Rating", "Review Count", "Type", "Postal Code", 
                  "Address Locality", "Country", "Region", "Street Address", "URL", "Image URL", "Room Types"]
    
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    # Scríobh an ceanntásc
    writer.writeheader()
    
    # Scríobh na sraitheanna sonraí
    writer.writerows(all_data)

Cód Comhlánaithe

Seo an cód iomlán a chomhcheanglaíonn na rannóga go léir:


import requests
from lxml.html import fromstring
import json
import csv

# Liosta na n -urls óstáin le scrape
urls_list = [
    "Https link", 
    "Https link"
]

# Tús a chur le liosta folamh chun na sonraí scríobtha go léir a shealbhú
all_data = []

proxies = {
    'http': ''
}

# Lúb trí gach URL chun sonraí a scrape
for url in urls_list:
    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': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        '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/130.0.0.0 Safari/537.36',
    }

    # An t -iarratas a sheoladh chuig an Láithreán Gréasáin
    response = requests.get(url, headers=headers, proxies=proxies)
    
    # An t -ábhar HTML a pharsáil
    parser = fromstring(response.text)
    
    # Sliocht Sonraí JSON leabaithe
    embeded_jsons = parser.xpath('//script[@type="application/ld+json"]/text()')
    json_data = json.loads(embeded_jsons[0])

    # Sliocht gach sonraí óstáin ó JSON
    name = json_data['name']
    location = json_data['hasMap']
    priceRange = json_data['priceRange']
    description = json_data['description']
    url = json_data['url']
    ratingValue = json_data['aggregateRating']['ratingValue']
    reviewCount = json_data['aggregateRating']['reviewCount']
    type_ = json_data['@type']
    postalCode = json_data['address']['postalCode']
    addressLocality = json_data['address']['addressLocality']
    addressCountry = json_data['address']['addressCountry']
    addressRegion = json_data['address']['addressRegion']
    streetAddress = json_data['address']['streetAddress']
    image_url = json_data['image']

    room_types = parser.xpath("//a[contains(@href, '#RD')]/span/text()")
    
    # Cuir na sonraí as a liosta all_data
    all_data.append({
        "Name": name,
        "Location": location,
        "Price Range": priceRange,
        "Rating": ratingValue,
        "Review Count": reviewCount,
        "Type": type_,
        "Postal Code": postalCode,
        "Address Locality": addressLocality,
        "Country": addressCountry,
        "Region": addressRegion,
        "Street Address": streetAddress,
        "URL": url,
        "Image URL": image_url,
        "Room Types": room_types
    })

# Tar éis gach URL a phróiseáil, scríobh na sonraí i gcomhad CSV
with open('booking_data.csv', 'w', newline='') as csvfile:
    fieldnames = ["Name", "Location", "Price Range", "Rating", "Review Count", "Type", "Postal Code", 
                  "Address Locality", "Country", "Region", "Street Address", "URL", "Image URL", "Room Types"]
    
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    # Scríobh an ceanntásc
    writer.writeheader()
    
    # Scríobh na sraitheanna sonraí
    writer.writerows(all_data)

print("Data successfully saved to booking_data.csv")

Léirigh an t -alt seo conas sonraí óstáin a scrape ó Booking.com ag baint úsáide as Python. Chuireamar béim ar an tábhacht a bhaineann le ceanntásca cuí HTTP agus seachvótálaithe a úsáid chun bearta frith-scrapála a sheachbhóthar. Is féidir na sonraí a bhaintear a shábháil i gcomhad CSV le haghaidh tuilleadh anailíse. Agus láithreáin ghréasáin á scríobadh agat, seiceáil na téarmaí seirbhíse i gcónaí chun sárú a sheachaint.

Tuairimí:

0 tuairimí