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.
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 = ""
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ú.
Ó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
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
Chun gach rud a nascadh le chéile, ní mór dúinn:
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]}")
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]}")
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.
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