Conas seachfhreastalaithe a rothlú agus sonraí gréasáin a scríobadh

Tuairimí: 0

Chomh maith leis an gcur chuige seo maidir le bailiú sonraí, is iomaí suíomh gréasáin atá ann, agus tá iarmhairtí ann chun leanúint ar aghaidh le scríobadh, cosúil le toirmeasc ar ár IP.

Ar nóta dearfach, cabhraíonn seirbhísí seachfhreastalaí leis an iarmhairt seo a sheachaint. Cuireann siad ar ár gcumas IP difriúil a ghlacadh agus sonraí á mbailiú ar líne, agus chomh slán agus is cosúil, is fearr úsáid a bhaint as il -sheachvótálaithe. Trí úsáid a bhaint as il -fhreastalaithe agus scríobadh, bíonn idirghníomhaíocht leis an láithreán gréasáin randamach agus cuireann sé leis an tslándáil.

Is siopa leabhar ar líne é an láithreán gréasáin Sprioc (foinse) don treoir seo. Déanann sé aithris ar shuíomh gréasáin ríomhthráchtála do leabhair. Ar na leabhair tá ainm, praghas agus infhaighteacht. Ós rud é nach ndíríonn an treoir seo ar na sonraí a cuireadh ar ais a eagrú ach ar sheachvótálaithe rothlacha, ní chuirfear na sonraí a cuireadh ar ais i láthair ach amháin sa chonsól.

An timpeallacht oibre a ullmhú agus proxies a chomhtháthú

Suiteáil agus allmhairiú roinnt modúl Python isteach inár gcomhad sular féidir linn tús a chur leis na feidhmeanna a chabhródh leis na seachvótálaithe a rothlú agus an láithreán gréasáin a scríobadh.

pip install requests beautifulSoup4 lxml

Is féidir 3 de na 5 mhodúl Python a theastaíonn don script scríobtha seo a shuiteáil ag baint úsáide as an ordú thuas. Ligeann iarratais dúinn iarratas HTTP a sheoladh chuig an láithreán gréasáin, ceadaíonn BeautifulSoup4 dúinn an fhaisnéis a bhaint as HTML an leathanaigh a chuirtear ar fáil trí iarratais, agus is parsálaí HTML é LXML.

Ina theannta sin, teastaíonn an modúl snáithe ionsuite uainn freisin chun il-thástáil a dhéanamh ar na seachvótálaithe chun a fháil amach an bhfuil siad ag obair agus ag JSON le léamh ó chomhad JSON.

import requests
import threading
from requests.auth import HTTPProxyAuth
import json
from bs4 import BeautifulSoup
import lxml
import time

url_to_scrape = "https://books.toscrape.com"
valid_proxies = []
book_names = []
book_price = []
book_availability = []
next_button_link = ""

Céim 1: Seachvótálaí a fhíorú ó liosta seachvótálaithe

Ciallaíonn tógáil script scríobtha a rothlaíonn seachvótálaithe go bhfuil liosta de na seachvótálaithe de dhíth orainn le linn uainíochta. Teastaíonn fíordheimhniú ó roinnt seachvótálaithe, agus ní dhéanann daoine eile. Ní mór dúinn liosta de na foclóirí a chruthú le sonraí seachfhreastalaí, lena n -áirítear an t -ainm úsáideora agus an pasfhocal seachfhreastalaí má tá fíordheimhniú ag teastáil.

Is é an cur chuige is fearr maidir leis seo ná ár gcuid faisnéise seachfhreastalaí a chur i gcomhad JSON ar leith a eagraítear mar an ceann thíos:

[
  {
    "proxy_address": "XX.X.XX.X:XX",
    "proxy_username": "",
    "proxy_password": ""
  },

  {
    "proxy_address": "XX.X.XX.X:XX",
    "proxy_username": "",
    "proxy_password": ""
  },
  {
    "proxy_address": "XX.X.XX.X:XX",
    "proxy_username": "",
    "proxy_password": ""
  },
  {
    "proxy_address": "XX.X.XX.X:XX",
    "proxy_username": "",
    "proxy_password": ""
  }
]

Sa réimse “Proxy_Address”, cuir isteach an seoladh IP agus an calafort, scartha le idirstad. Sna réimsí “Proxy_Username” agus “Proxy_Password”, cuir an t -ainm úsáideora agus an pasfhocal ar fáil le haghaidh údaraithe.

Thuas tá ábhar comhaid JSON le 4 sheachvótálaí le go roghnóidh an script as. Is féidir leis an ainm úsáideora agus an pasfhocal a bheith folamh, ag léiriú seachvótálaí nach dteastaíonn aon fhíordheimhniú uaidh.

def verify_proxies(proxy:dict):
    try:
        if proxy['proxy_username'] != "" and  proxy['proxy_password'] != "":
            proxy_auth = HTTPProxyAuth(proxy['proxy_username'], proxy['proxy_password'])
            res = requests.get(
                url_to_scrape,
                auth = proxy_auth,
                proxies={
                "http" : proxy['proxy_address']
                }
            )
        else:
            res = requests.get(url_to_scrape, proxies={
                "http" : proxy['proxy_address'],
            })
        
        if res.status_code == 200:
            valid_proxies.append(proxy)
            print(f"Proxy Validated: {proxy['proxy_address']}")
            
    except:
        print("Proxy Invalidated, Moving on")

Mar réamhchúram, cinntíonn an fheidhm seo go bhfuil na seachvótálaithe a chuirtear ar fáil gníomhach agus ag obair. Is féidir linn é seo a bhaint amach trí lúbadh trí gach foclóir i gcomhad JSON, iarratas GET a sheoladh chuig an Láithreán Gréasáin, agus má sheoltar cód stádais 200 ar ais, cuir an seachvótálaí sin leis an liosta bailí_proxies - athróg a chruthaíomar níos luaithe chun an teach Seachvótálaithe a oibríonn ón liosta sa chomhad. Mura n -éiríonn leis an nglao, leanann forghníomhú.

Céim 2: Iarratas ar scríobadh gréasáin a sheoladh

Ós rud é go bhfuil cód HTML an láithreán gréasáin de dhíth ar BeautifulSoup chun na sonraí a theastaíonn uainn a bhaint amach, tá Request_Function () cruthaithe againn, a thógann an URL agus an seachvótálaí de rogha agus a fhilleann an cód HTML mar théacs. Cuireann an t -athróg seachvótálaí ar ár gcumas an t -iarratas a chur ar aghaidh trí sheachvótálaithe éagsúla, mar sin an seachvótálaí a rothlú.

def request_function(url, proxy):
    try:
        if proxy['proxy_username'] != "" and  proxy['proxy_password'] != "":
            proxy_auth = HTTPProxyAuth(proxy['proxy_username'], proxy['proxy_password'])
            response = requests.get(
                url,
                auth = proxy_auth,
                proxies={
                "http" : proxy['proxy_address']
                }
            )
        else:
            response = requests.get(url, proxies={
                "http" : proxy['proxy_address']
            })
        
        if response.status_code == 200:
            return response.text

    except Exception as err:
        print(f"Switching Proxies, URL access was unsuccessful: {err}")
        return None

Céim 3: Sonraí a bhaint as Láithreán Gréasáin Sprioc

Sleachtanna_Extract () Sleachta na sonraí a theastaíonn uainn ón gcód HTML a chuirtear ar fáil. Bailíonn sé an eilimint HTML ina bhfuil an t -eolas leabhair mar ainm, praghas agus infhaighteacht an leabhair. Baineann sé freisin an nasc don chéad leathanach eile.

Tá sé seo thar a bheith deacair toisc go bhfuil an nasc dinimiciúil, mar sin bhí orainn cuntas a thabhairt ar an dinimiceas. Mar fhocal scoir, féachann sé ar na leabhair agus sleachtann sé an t -ainm, an praghas agus an infhaighteacht, ansin cuireann sé an nasc eile ar ais a d'úsáidfimis chun cód HTML an chéad leathanach eile a aisghabháil.

def data_extract(response):
    soup = BeautifulSoup(response, "lxml")
    books = soup.find_all("li", class_="col-xs-6 col-sm-4 col-md-3 col-lg-3")
    next_button_link = soup.find("li", class_="next").find('a').get('href')
    next_button_link=f"{url_to_scrape}/{next_button_link}" if "catalogue" in next_button_link else f"{url_to_scrape}/catalogue/{next_button_link}"

    for each in books:
        book_names.append(each.find("img").get("alt"))
        book_price.append(each.find("p", class_="price_color").text)
        book_availability.append(each.find("p", class_="instock availability").text.strip())

    return next_button_link

Céim 4: Gach rud a nascadh le chéile

Chun gach rud a nascadh le chéile, ní mór dúinn:

  1. Luchtaigh na sonraí seachfhreastalaí ón gcomhad JSON. Cuir tús le snáithe do gach seachvótálaí ag baint úsáide as an snáithe.Thread (). Cuideoidh sé seo linn il -fhreastalaithe a thástáil ag an am. Cuirtear na seachvótálaithe bailí le bailí_proxies ().
  2. Luchtaigh leathanach baile na foinse ag baint úsáide as seachvótálaí bailí. Mura n -oibríonn seachvótálaí, bainimid úsáid as an gcéad cheann eile, go léir chun a chinntiú go n -ualú nó nach bhfillfidh an leathanach baile ar bith sula leanann an forghníomhú.
  3. Ansin déanaimid rothaíocht trí sheachvótálaithe gníomhacha, bainimid úsáid as an bhfeidhm Request_Function () chun iarratas GET a chruthú. Agus má fuair muid iarratas GET, bailímid sonraí ón suíomh.
  4. Ar deireadh, déanaimid na sonraí a bhailítear leis an gconsól a phriontáil.
with open("proxy-list.json") as json_file:
    proxies = json.load(json_file)
    for each in proxies:
        threading.Thread(target=verify_proxies, args=(each, )).start() 


time.sleep(4)

for i in range(len(valid_proxies)):
    response = request_function(url_to_scrape, valid_proxies[i])
    if response != None:
        next_button_link = data_extract(response)
        break
    else:
        continue

for proxy in valid_proxies:
   print(f"Using Proxy: {proxy['proxy_address']}")
   response = request_function(next_button_link, proxy)
   if response is not None:
       next_button_link = data_extract(response)
   else:
       continue


for each in range(len(book_names)):
    print(f"No {each+1}: Book Name: {book_names[each]} Book Price: {book_price[each]} and Availability {book_availability[each]}")

Cód iomlán

import requests
import threading
from requests.auth import HTTPProxyAuth
import json
from bs4 import BeautifulSoup
import time

url_to_scrape = "https://books.toscrape.com"
valid_proxies = []
book_names = []
book_price = []
book_availability = []
next_button_link = ""


def verify_proxies(proxy: dict):
   try:
       if proxy['proxy_username'] != "" and proxy['proxy_password'] != "":
           proxy_auth = HTTPProxyAuth(proxy['proxy_username'], proxy['proxy_password'])
           res = requests.get(
               url_to_scrape,
               auth=proxy_auth,
               proxies={
                   "http": proxy['proxy_address'],
               }
           )
       else:
           res = requests.get(url_to_scrape, proxies={
               "http": proxy['proxy_address'],
           })

       if res.status_code == 200:
           valid_proxies.append(proxy)
           print(f"Proxy Validated: {proxy['proxy_address']}")

   except:
       print("Proxy Invalidated, Moving on")


# Aisghabhann an ghné HTML de leathanach
def request_function(url, proxy):
   try:
       if proxy['proxy_username'] != "" and proxy['proxy_password'] != "":
           proxy_auth = HTTPProxyAuth(proxy['proxy_username'], proxy['proxy_password'])
           response = requests.get(
               url,
               auth=proxy_auth,
               proxies={
                   "http": proxy['proxy_address'],
               }
           )
       else:
           response = requests.get(url, proxies={
               "http": proxy['proxy_address'],
           })

       if response.status_code == 200:
           return response.text

   except Exception as err:
       print(f"Switching Proxies, URL access was unsuccessful: {err}")
       return None


# Scríobadh
def data_extract(response):
   soup = BeautifulSoup(response, "lxml")
   books = soup.find_all("li", class_="col-xs-6 col-sm-4 col-md-3 col-lg-3")
   next_button_link = soup.find("li", class_="next").find('a').get('href')
   next_button_link = f"{url_to_scrape}/{next_button_link}" if "catalogue" in next_button_link else f"{url_to_scrape}/catalogue/{next_button_link}"

   for each in books:
       book_names.append(each.find("img").get("alt"))
       book_price.append(each.find("p", class_="price_color").text)
       book_availability.append(each.find("p", class_="instock availability").text.strip())

   return next_button_link


# Faigh seachvótálaí ó json
with open("proxy-list.json") as json_file:
   proxies = json.load(json_file)
   for each in proxies:
       threading.Thread(target=verify_proxies, args=(each,)).start()

time.sleep(4)

for i in range(len(valid_proxies)):
   response = request_function(url_to_scrape, valid_proxies[i])
   if response is not None:
       next_button_link = data_extract(response)
       break
   else:
       continue

for proxy in valid_proxies:
   print(f"Using Proxy: {proxy['proxy_address']}")
   response = request_function(next_button_link, proxy)
   if response is not None:
       next_button_link = data_extract(response)
   else:
       continue

for each in range(len(book_names)):
   print(
       f"No {each + 1}: Book Name: {book_names[each]} Book Price: {book_price[each]} and Availability {book_availability[each]}")

Toradh deiridh

Tar éis forghníomhaithe rathúil, tá na torthaí cosúil leis na torthaí thíos. Leanann sé seo ar aghaidh chun faisnéis a bhaint amach ar níos mó ná 100 leabhar ag baint úsáide as an 2 sheachvótálaí a chuirtear ar fáil.

1.png

2.png

3.png

4.png

Trí úsáid a bhaint as seachvótálaithe iolracha le haghaidh scríobtha gréasáin is féidir méadú a dhéanamh ar líon na n -iarratas ar an sprioc -acmhainn agus cabhraíonn sé le blocáil a sheachbhóthar. Chun cobhsaíocht an phróisis scríobtha a choinneáil, moltar duit seoltaí IP a úsáid a thairgeann fachtóir ardluais agus iontaobhais láidir, mar shampla ISP statach agus seachvótálaithe cónaitheacha dinimiciúla. Ina theannta sin, is féidir feidhmiúlacht an script a sholáthraítear a leathnú go héasca chun freastal ar riachtanais scríobtha sonraí éagsúla.

Tuairimí:

0 tuairimí