اعداد و شمار کے اجتماع کے بارے میں یہ نقطہ نظر جتنا اچھا لگتا ہے ، اس پر بہت ساری ویب سائٹوں نے اس کی نشاندہی کی ہے ، اور ہمارے آئی پی پر پابندی کی طرح سکریپنگ کے ساتھ عمل کرنے کے نتائج برآمد ہوئے ہیں۔
ایک مثبت نوٹ پر ، پراکسی خدمات اس نتیجے سے بچنے میں مدد کرتی ہیں۔ وہ ہمیں آن لائن ڈیٹا اکٹھا کرتے وقت ایک مختلف IP لینے کی اجازت دیتے ہیں ، اور جتنا محفوظ لگتا ہے ، ایک سے زیادہ پراکسیوں کا استعمال بہتر ہے۔ کھرچنے کے دوران متعدد پراکسیوں کا استعمال ویب سائٹ کے ساتھ تعامل کو بے ترتیب دکھاتا ہے اور سیکیورٹی کو بڑھاتا ہے۔
اس گائیڈ کے لئے ہدف ویب سائٹ (ماخذ) ایک آن لائن کتاب کی دکان ہے۔ یہ کتابوں کے لئے ایک ای کامرس ویب سائٹ کی نقل کرتا ہے۔ اس پر ایک نام ، قیمت اور دستیابی والی کتابیں ہیں۔ چونکہ یہ گائیڈ واپس ڈیٹا کو منظم کرنے پر مرکوز نہیں بلکہ گھومنے والی پراکسیوں پر مرکوز ہے ، لہذا واپس کردہ ڈیٹا کو صرف کنسول میں پیش کیا جائے گا۔
اس سے پہلے کہ ہم ان افعال کو کوڈ کرنا شروع کردیں جو پراکسیوں کو گھومنے اور ویب سائٹ کو کھرچنے میں مدد فراہم کرسکیں ، ہماری فائل میں کچھ ازگر ماڈیول انسٹال اور درآمد کریں۔
pip install requests beautifulSoup4 lxml
اس سکریپنگ اسکرپٹ کے لئے درکار 5 ازگر ماڈیول میں سے 3 مذکورہ کمانڈ کا استعمال کرتے ہوئے انسٹال کیا جاسکتا ہے۔ درخواستوں سے ہمیں ویب سائٹ پر HTTP کی درخواست بھیجنے کی اجازت ملتی ہے ، BealuitySOP4 ہمیں درخواستوں کے ذریعہ فراہم کردہ صفحہ کے HTML سے معلومات نکالنے کی اجازت دیتا ہے ، اور LXML ایک HTML پارسر ہے۔
اس کے علاوہ ، ہمیں پراکسیوں کی متعدد جانچ کی اجازت دینے کے لئے بلٹ ان تھریڈنگ ماڈیول کی بھی ضرورت ہے کہ آیا وہ کام کرتے ہیں اور JSON 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 = ""
پراکسیوں کو گھومنے والی سکریپنگ اسکرپٹ کی تعمیر کا مطلب ہے کہ ہمیں گردش کے دوران انتخاب کرنے کے لئے پراکسیوں کی فہرست کی ضرورت ہے۔ کچھ پراکسیوں کی توثیق کی ضرورت ہوتی ہے ، اور دوسروں کو ایسا نہیں ہوتا ہے۔ ہمیں پراکسی تفصیلات کے ساتھ لغت کی ایک فہرست بنانا ہوگی ، جس میں پراکسی صارف نام اور پاس ورڈ بھی شامل ہے اگر توثیق کی ضرورت ہو۔
اس کے بارے میں بہترین نقطہ نظر یہ ہے کہ اپنی پراکسی معلومات کو نیچے کی طرح منظم کردہ ایک الگ JSON فائل میں رکھنا ہے:
[
{
"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": ""
}
]
"proxy_address" فیلڈ میں ، ایک بڑی آنت کے ذریعہ الگ کردہ IP ایڈریس اور پورٹ درج کریں۔ "proxy_username" اور "proxy_password" فیلڈز میں ، اجازت کے لئے صارف نام اور پاس ورڈ فراہم کریں۔
اوپر اسکرپٹ کے لئے 4 پراکسیوں کے ساتھ JSON فائل کا مواد ہے۔ صارف نام اور پاس ورڈ خالی ہوسکتا ہے ، جس سے ایک پراکسی کی نشاندہی ہوتی ہے جس میں کسی توثیق کی ضرورت نہیں ہوتی ہے۔
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")
احتیاط کے طور پر ، یہ فنکشن اس بات کو یقینی بناتا ہے کہ فراہم کردہ پراکسی فعال اور کام کر رہے ہیں۔ ہم اس کو JSON فائل میں ہر لغت کو لوٹ کر ، ویب سائٹ کو گیٹ درخواست بھیج کر ، اور اگر 200 کا اسٹیٹس کوڈ واپس کر کے اس کو حاصل کرسکتے ہیں تو ، اس پراکسی کو ویلیو_پروکس کی فہرست میں شامل کریں - ایک متغیر جو ہم نے پہلے تیار کیا تھا پراکسی جو فائل میں فہرست سے کام کرتے ہیں۔ اگر کال کامیاب نہیں ہے تو ، عملدرآمد جاری ہے۔
چونکہ بیوٹیو سوپ کو ہماری ضرورت کے اعداد و شمار کو نکالنے کے لئے ویب سائٹ کے HTML کوڈ کی ضرورت ہے ، لہذا ہم نے درخواست_فکشن () تشکیل دی ہے ، جو URL اور انتخاب کا پراکسی لیتا ہے اور HTML کوڈ کو متن کے بطور واپس کرتا ہے۔ پراکسی متغیر ہمیں مختلف پراکسیوں کے ذریعے درخواست کو روٹ کرنے کے قابل بناتا ہے ، لہذا پراکسی کو گھوماتا ہے۔
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
ڈیٹا_کسٹرک () فراہم کردہ HTML کوڈ سے ہمیں جس ڈیٹا کی ضرورت ہے اسے نکالتا ہے۔ یہ کتاب کی معلومات جیسے کتاب کا نام ، قیمت اور دستیابی جیسے HTML عنصر کو جمع کرتا ہے۔ یہ اگلے صفحے کے ل the لنک کو بھی نکالتا ہے۔
یہ خاص طور پر مشکل ہے کیونکہ لنک متحرک ہے ، لہذا ہمیں حرکیات کا محاسبہ کرنا پڑا۔ آخر میں ، یہ کتابوں کے ذریعے دیکھتا ہے اور نام ، قیمت اور دستیابی کو نکالتا ہے ، پھر اگلا بٹن لنک واپس کرتا ہے جسے ہم اگلے صفحے کے HTML کوڈ کو بازیافت کرنے کے لئے استعمال کریں گے۔
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
ہر چیز کو ایک ساتھ جوڑنے کے ل we ، ہمیں کرنا ہے:
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")
# کسی صفحے کے HTML عنصر کو بازیافت کرتا ہے
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
# سکریپنگ
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
# Get proxy from 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]}")
ایک کامیاب پھانسی کے بعد ، نتائج نیچے کی طرح نظر آتے ہیں۔ یہ فراہم کردہ 2 پراکسیوں کا استعمال کرتے ہوئے 100 سے زیادہ کتابوں کے بارے میں معلومات نکالتا ہے۔
ویب سکریپنگ کے ل multiple ایک سے زیادہ پراکسیوں کا استعمال ہدف کے وسائل میں درخواستوں کی تعداد میں اضافے کے قابل بناتا ہے اور بائی پاس بلاک کرنے میں مدد کرتا ہے۔ سکریپنگ کے عمل کے استحکام کو برقرار رکھنے کے ل it ، آئی پی ایڈریس استعمال کرنے کا مشورہ دیا جاتا ہے جو تیز رفتار اور ایک مضبوط اعتماد کا عنصر پیش کرتے ہیں ، جیسے جامد آئی ایس پی اور متحرک رہائشی پراکسی۔ مزید برآں ، مختلف ڈیٹا سکریپنگ کی ضروریات کو ایڈجسٹ کرنے کے لئے فراہم کردہ اسکرپٹ کی فعالیت کو آسانی سے بڑھایا جاسکتا ہے۔
تبصرے: 0