Trong crawler Python3, sử dụng proxy là một phương pháp phổ biến để ngăn IP bị chặn hoặc tăng tốc độ thu thập dữ liệu, chủ yếu dùng để mô phỏng truy cập từ nhiều địa chỉ IP. Proxy có thể được chia thành hai loại: proxy miễn phí và proxy trả phí, trong đó proxy miễn phí không ổn định, còn proxy trả phí tương đối ổn định và đáng tin cậy hơn.
Dưới đây là các tình huống sử dụng và ứng dụng của proxy cho crawler Python3:
Ngăn IP bị chặn: Một số website đặt giới hạn tần suất truy cập theo IP. Nếu số lần truy cập vượt quá giới hạn, IP đó sẽ bị cấm truy cập website. Sử dụng proxy có thể tránh được tình huống này.
Tăng tốc độ thu thập: sử dụng proxy có thể đồng thời thiết lập nhiều kết nối, từ đó đạt mục đích thu thập dữ liệu mục tiêu nhanh chóng.
Vượt qua giới hạn khu vực: Một số website cung cấp dịch vụ khác nhau ở từng khu vực. Nếu bạn cần truy cập các website chỉ mở cho một số khu vực nhất định, sử dụng proxy có thể vượt qua hạn chế này để bạn lấy được dữ liệu cần thiết.
Tóm lại, proxy IP đóng vai trò rất quan trọng trong crawler Python3. Vì việc sử dụng proxy cũng có thể kéo theo một số vấn đề bảo mật, nên khi sử dụng proxy cần chú ý chọn nhà cung cấp dịch vụ proxy phù hợp và tuân thủ nghiêm ngặt các quy định về an ninh mạng.
Công việc chuẩn bị
Trước tiên, chúng ta cần lấy một proxy khả dụng. Proxy là tổ hợp của địa chỉ IP và cổng, tức là ip:cổng Định dạng như vậy. Nếu proxy yêu cầu xác thực truy cập, thì còn cần thêm hai thông tin là tên người dùng và mật khẩu.
Ở đây máy của tôi đã cài một phần mềm proxy, phần mềm này sẽ tạo dịch vụ proxy HTTP trên cổng 7890 của máy cục bộ, tức proxy là 127.0.0.1:7890. Ngoài ra, phần mềm này cũng sẽ tạo dịch vụ proxy SOCKS trên cổng 7891, tức proxy là 127.0.0.1:7891, vì vậy chỉ cần cấu hình proxy này là có thể chuyển IP của máy hiện tại sang IP của máy chủ mà phần mềm proxy đang kết nối.
Trong các ví dụ ở phần sau của chương này, tôi sử dụng proxy nêu trên để minh họa cách thiết lập, bạn cũng có thể tự thay bằng proxy khả dụng của mình.
Sau khi thiết lập proxy, URL dùng để kiểm tra là http://httpbin.org/get Khi truy cập liên kết này, chúng ta có thể nhận được thông tin liên quan đến yêu cầu. Trong đó, trường origin trong kết quả trả về chính là IP của client. Chúng ta có thể dựa vào đó để xác định proxy đã được cấu hình thành công hay chưa, tức là có giả mạo IP thành công hay không.
Được, tiếp theo chúng ta hãy xem cách thiết lập proxy cho từng thư viện request.
Nhận proxy crawler Python3
Một số website sẽ phát hiện việc truy cập dữ liệu của họ quá thường xuyên và áp dụng biện pháp để chặn các lượt truy cập đó. Sử dụng máy chủ proxy có thể phân tán nguồn truy cập, giảm khả năng bị phát hiện, từ đó tăng tỷ lệ crawl thành công.
Proxy tĩnh tốt nhất tại Mỹ
IPRoyal là nhà cung cấp dịch vụ proxy cực kỳ thân thiện với khu vực Trung Quốc, các giải pháp proxy residential của họ rất hấp dẫn
Xem IPRoyal
Proxy tĩnh rẻ nhất
Proxy-seller là một nhà cung cấp proxy datacenter, được nhiều nhà tiếp thị Internet quy mô nhỏ ưa chuộng.
Xem Proxy-seller
Proxy tĩnh giá phải chăng nhất
Shifter.io là một nhà cung cấp dịch vụ proxy nổi tiếng, nhằm mang đến cho người dùng khả năng bảo vệ quyền riêng tư và trải nghiệm Internet tốt hơn.
Xem Shifter.io
2. urllib
Trước tiên, chúng ta lấy urllib cơ bản nhất làm ví dụ để xem cách thiết lập proxy, mã như sau:
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy = '127.0.0.1:7890'
proxy_handler = ProxyHandler({
'http': 'http://' + proxy,
'https': 'http://' + proxy
})
opener = build_opener(proxy_handler)
try:
response = opener.open('https://httpbin.org/get')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
Kết quả chạy như sau:
{
"args": {},
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7",
"X-Amzn-Trace-Id": "Root=1-60e9a1b6-0a20b8a678844a0b2ab4e889"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Ở đây chúng ta cần dùng ProxyHandler để thiết lập proxy, Thông số là kiểu từ điển, trong đó khóa là loại giao thức và giá trị là proxy. Lưu ý, phía trước proxy ở đây cần thêm giao thức, tức là http:// hoặc https://,khi liên kết được yêu cầu là giao thức HTTP, proxy tương ứng với khóa http sẽ được sử dụng; khi liên kết được yêu cầu là giao thức HTTPS, proxy tương ứng với khóa https sẽ được sử dụng. Tuy nhiên, ở đây chúng ta đặt bản thân proxy là giao thức HTTP, tức tiền tố được thống nhất đặt là
http://vì vậy dù truy cập liên kết dùng giao thức HTTP hay HTTPS, yêu cầu đều sẽ được gửi qua proxy giao thức HTTP mà chúng ta đã cấu hình.
Sau khi tạo xong đối tượng ProxyHandler, chúng ta cần dùng phương thức build_opener để truyền đối tượng này vào và tạo một Opener, như vậy có nghĩa là Opener này đã được cấu hình proxy. Tiếp theo, chỉ cần gọi trực tiếp phương thức open của đối tượng Opener là có thể truy cập liên kết mong muốn.
Kết quả đầu ra khi chạy là một JSON, trong đó có một trường origin dùng để chỉ ra IP của phía client. Hãy kiểm tra để xác nhận rằng IP tại đây đúng là IP của proxy chứ không phải IP thật. Như vậy chúng ta đã thiết lập proxy thành công và có thể ẩn IP thật.
Nếu gặp proxy cần xác thực, chúng ta có thể thiết lập theo cách sau:
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy = 'username:password@127.0.0.1:7890'
proxy_handler = ProxyHandler({
'http': 'http://' + proxy,
'https': 'http://' + proxy
})
opener = build_opener(proxy_handler)
try:
response = opener.open('https://httpbin.org/get')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
Phần thay đổi ở đây chỉ là biến proxy, chỉ cần thêm tên người dùng và mật khẩu xác thực proxy ở phía trước proxy. Trong đó username là tên người dùng, password là mật khẩu. Ví dụ, username là foo, mật khẩu là bar, thì proxy sẽ là foo:bar@127.0.0.1:7890。
Nếu proxy là loại SOCKS5, thì có thể cấu hình proxy như sau:
import socks
import socket
from urllib import request
from urllib.error import URLError
socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 7891)
socket.socket = socks.socksocket
try:
response = request.urlopen('https://httpbin.org/get')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
Ở đây cần một mô-đun socks, có thể cài đặt bằng lệnh sau:
pip3 install PySocks
Ở đây cần chạy một proxy SOCKS5 cục bộ trên cổng 7891. Sau khi chạy thành công, kết quả đầu ra sẽ giống với proxy HTTP ở trên:
{
"args": {},
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7",
"X-Amzn-Trace-Id": "Root=1-60e9a1b6-0a20b8a678844a0b2ab4e889"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Trường origin trong kết quả cũng là IP của proxy, cho thấy việc thiết lập proxy đã thành công.
Cài đặt proxy cho 3.requests
Đối với requests, việc cấu hình proxy rất đơn giản, chúng ta chỉ cần truyền vào proxies làm Thông số là được.
Ở đây lấy proxy trên máy cục bộ của tôi làm ví dụ, hãy xem cách thiết lập proxy HTTP cho requests, mã như sau:
import requests
proxy = '127.0.0.1:7890'
proxies = {
'http': 'http://' + proxy,
'https': 'http://' + proxy,
}
try:
response = requests.get('https://httpbin.org/get', proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)
Kết quả chạy như sau:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e8f358d-87913f68a192fb9f87aa0323"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Giống như urllib, khi liên kết được yêu cầu dùng giao thức HTTP, proxy tương ứng với khóa http sẽ được sử dụng; khi liên kết được yêu cầu dùng giao thức HTTPS, proxy tương ứng với khóa https sẽ được sử dụng, nhưng ở đây thống nhất dùng proxy của giao thức HTTP.
trong kết quả chạy origin Nếu đó là IP của máy chủ proxy thì chứng tỏ proxy đã được thiết lập thành công.
Nếu proxy yêu cầu xác thực, chỉ cần thêm tên người dùng và mật khẩu vào trước proxy, khi đó cách viết proxy sẽ trở thành như sau:
proxy = 'username:password@127.0.0.1:7890'
Ở đây chỉ cần đưa username và password Chỉ cần thay thế là được.
Nếu cần sử dụng proxy SOCKS, bạn có thể thiết lập theo cách sau:
import requests
proxy = '127.0.0.1:7891'
proxies = {
'http': 'socks5://' + proxy,
'https': 'socks5://' + proxy
}
try:
response = requests.get('https://httpbin.org/get', proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)
Ở đây chúng ta cần cài thêm một gói requests[socks], các lệnh liên quan như sau:
pip3 install "requests[socks]"
Kết quả chạy hoàn toàn giống nhau:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e8f364a-589d3cf2500fafd47b5560f2"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Ngoài ra, còn có một cách thiết lập khác, đó là sử dụng mô-đun socks; tương tự như trên, cũng cần cài đặt thư viện socks. Cách thiết lập này như sau:
import requests
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 7891)
socket.socket = socks.socksocket
try:
response = requests.get('https://httpbin.org/get')
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)
Cũng có thể dùng cách này để thiết lập proxy SOCKS, và kết quả chạy hoàn toàn giống nhau. So với cách thứ nhất, cách này là thiết lập toàn cục. Chúng ta có thể chọn cách phù hợp tùy theo từng tình huống.
4. Cài đặt proxy cho httpx
Bản thân cách dùng của httpx rất giống với requests, vì vậy nó cũng thiết lập proxy thông qua Thông số proxies, nhưng khác với requests ở chỗ tên khóa của Thông số proxies không thể tiếp tục là http hoặc https,và cần đổi thành http:// hoặc https://,các thiết lập khác đều giống nhau。
Đối với proxy HTTP, cách thiết lập như sau:
import httpx
proxy = '127.0.0.1:7890'
proxies = {
'http://': 'http://' + proxy,
'https://': 'http://' + proxy,
}
with httpx.Client(proxies=proxies) as client:
response = client.get('https://httpbin.org/get')
print(response.text)
Đối với proxy yêu cầu xác thực, chỉ cần sửa giá trị của proxy là được:
proxy = 'username:password@127.0.0.1:7890'
Ở đây chỉ cần đưa username và password Chỉ cần thay thế là được.
Kết quả chạy tương tự như khi dùng requests, như sau:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-httpx/0.18.1",
"X-Amzn-Trace-Id": "Root=1-60e9a3ef-5527ff6320484f8e46d39834"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Đối với proxy SOCKS, chúng ta cần cài đặt thư viện httpx-socks, cách cài đặt như sau:
pip3 install "httpx-socks[asyncio]"
Cách này sẽ đồng thời cài đặt hỗ trợ cho cả hai chế độ đồng bộ và bất đồng bộ.
Đối với chế độ đồng bộ, cách cài đặt như sau:
import httpx
from httpx_socks import SyncProxyTransport
transport = SyncProxyTransport.from_url(
'socks5://127.0.0.1:7891')
with httpx.Client(transport=transport) as client:
response = client.get('https://httpbin.org/get')
print(response.text)
Ở đây chúng ta cần thiết lập một đối tượng transport và cấu hình địa chỉ của proxy SOCKS, đồng thời chỉ cần truyền Thông số transport khi khai báo đối tượng Client của httpx là được, kết quả chạy sẽ giống như vừa rồi.
Đối với chế độ bất đồng bộ, cách cài đặt như sau:
import httpx
import asyncio
from httpx_socks import AsyncProxyTransport
transport = AsyncProxyTransport.from_url(
'socks5://127.0.0.1:7891')
async def main():
async with httpx.AsyncClient(transport=transport) as client:
response = await client.get('https://httpbin.org/get')
print(response.text)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Khác với chế độ đồng bộ, đối tượng transport ở đây dùng AsyncProxyTransport thay vì SyncProxyTransport, đồng thời cần đổi đối tượng Client thành AsyncClient, còn lại không thay đổi, kết quả chạy vẫn như nhau.
5. Cài đặt proxy cho Selenium
Selenium cũng có thể cấu hình proxy, ở đây lấy Chrome làm ví dụ để giới thiệu cách thiết lập.
Đối với proxy không cần xác thực, cách thiết lập như sau:
from selenium import webdriver
proxy = '127.0.0.1:7890'
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://' + proxy)
browser = webdriver.Chrome(options=options)
browser.get('https://httpbin.org/get')
print(browser.page_source)
browser.close()
Kết quả chạy như sau:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e8f39cd-60930018205fd154a9af39cc"
},
"origin": "210.173.1.204",
"url": "http://httpbin.org/get"
}
Cài đặt proxy thành công,origin Cũng là địa chỉ của proxy IP.
Nếu proxy là proxy xác thực, thì cách thiết lập sẽ tương đối phức tạp hơn, cụ thể như sau:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import zipfile
ip = '127.0.0.1'
port = 7890
username = 'foo'
password = 'bar'
manifest_json = """{"version":"1.0.0","manifest_version": 2,"name":"Chrome Proxy","permissions": ["proxy","tabs","unlimitedStorage","storage","<all_urls>","webRequest","webRequestBlocking"],"background": {"scripts": ["background.js"]
}
}
"""
background_js = """
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "%(ip) s",
port: %(port) s
}
}
}
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {username: "%(username) s",
password: "%(password) s"
}
}
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
)
""" % {'ip': ip, 'port': port, 'username': username, 'password': password}
plugin_file = 'proxy_auth_plugin.zip'
with zipfile.ZipFile(plugin_file, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
options = Options()
options.add_argument("--start-maximized")
options.add_extension(plugin_file)
browser = webdriver.Chrome(options=options)
browser.get('https://httpbin.org/get')
print(browser.page_source)
browser.close()
Ở đây cần tạo cục bộ một tệp cấu hình manifest.json và script background.js để thiết lập proxy xác thực. Sau khi chạy đoạn mã, cục bộ sẽ tạo ra một tệp proxy_auth_plugin.zip để lưu cấu hình hiện tại.
Kết quả chạy giống với ví dụ trên,origin Cũng là IP proxy.
Cách thiết lập proxy SOCKS cũng khá đơn giản, chỉ cần đổi giao thức tương ứng thành socks5 là được, cách thiết lập proxy không có xác thực mật khẩu như sau:
from selenium import webdriver
proxy = '127.0.0.1:7891'
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=socks5://' + proxy)
browser = webdriver.Chrome(options=options)
browser.get('https://httpbin.org/get')
print(browser.page_source)
browser.close()
Kết quả chạy là như nhau.
6.Cài đặt proxy cho aiohttp
Đối với aiohttp, chúng ta có thể thông qua proxy Thông số để thiết lập trực tiếp. Cấu hình proxy HTTP như sau:
import asyncio
import aiohttp
proxy = 'http://127.0.0.1:7890'
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('https://httpbin.org/get', proxy=proxy) as response:
print(await response.text())
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Nếu proxy có tên người dùng và mật khẩu, tương tự như requests, hãy đặt proxy Sửa thành nội dung như sau:
proxy = 'http://username:password@127.0.0.1:7890'
Ở đây chỉ cần đưa username và password Chỉ cần thay thế là được.
Đối với proxy SOCKS, chúng ta cần cài đặt một thư viện hỗ trợ là aiohttp-socks, lệnh cài đặt như sau:
pip3 install aiohttp-socks
Chúng ta có thể dùng ProxyConnector của thư viện này để thiết lập proxy SOCKS, mã như sau:
import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
connector = ProxyConnector.from_url('socks5://127.0.0.1:7891')
async def main():
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('https://httpbin.org/get') as response:
print(await response.text())
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Kết quả chạy là như nhau.
Ngoài ra, thư viện này còn hỗ trợ thiết lập proxy SOCKS4, HTTP và xác thực proxy tương ứng, có thể tham khảo phần giới thiệu chính thức của nó.
7. Cài đặt proxy cho Pyppeteer
Đối với Pyppeteer, vì mặc định nó sử dụng trình duyệt Chromium tương tự Chrome, nên cách thiết lập của nó giống với Chrome trong Selenium, chẳng hạn phương pháp thiết lập proxy HTTP không xác thực đều thông qua args để thiết lập, triển khai như sau:
import asyncio
from pyppeteer import launch
proxy = '127.0.0.1:7890'
async def main():
browser = await launch({'args': ['--proxy-server=http://' + proxy], 'headless': False})
page = await browser.newPage()
await page.goto('https://httpbin.org/get')
print(await page.content())
await browser.close()
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Kết quả chạy như sau:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3494.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e8f442c-12b1ed7865b049007267a66c"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Tương tự, bạn cũng có thể thấy cài đặt đã thành công.
Proxy SOCKS cũng tương tự, chỉ cần đổi giao thức thành socks5 là được, mã triển khai như sau:
import asyncio
from pyppeteer import launch
proxy = '127.0.0.1:7891'
async def main():
browser = await launch({'args': ['--proxy-server=socks5://' + proxy], 'headless': False})
page = await browser.newPage()
await page.goto('https://httpbin.org/get')
print(await page.content())
await browser.close()
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Kết quả chạy cũng giống nhau.
8. Cài đặt proxy cho Playwright
So với Selenium và Pyppeteer, việc cấu hình proxy của Playwright thuận tiện hơn. Nó có sẵn một Thông số proxy, có thể thiết lập khi khởi động Playwright.
Đối với proxy HTTP, có thể thiết lập như sau:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
'server': 'http://127.0.0.1:7890'
})
page = browser.new_page()
page.goto('https://httpbin.org/get')
print(page.content())
browser.close()
Khi gọi phương thức launch, chúng ta có thể truyền vào một Thông số proxy, đây là một từ điển. Từ điển này có một trường bắt buộc tên là server, tại đây chúng ta chỉ cần điền trực tiếp địa chỉ của proxy HTTP là được.
Kết quả chạy như sau:
{
"args": {},
"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.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Host": "httpbin.org",
"Sec-Ch-Ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"92\"",
"Sec-Ch-Ua-Mobile": "?0",
"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 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-60e99eef-4fa746a01a38abd469ecb467"
},
"origin": "210.173.1.204",
"url": "https://httpbin.org/get"
}
Với proxy SOCKS, cách thiết lập cũng hoàn toàn giống nhau, chúng ta chỉ cần đổi giá trị của trường server thành địa chỉ của proxy SOCKS là được:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
'server': 'socks5://127.0.0.1:7891'
})
page = browser.new_page()
page.goto('https://httpbin.org/get')
print(page.content())
browser.close()
Kết quả chạy cũng hoàn toàn giống như vừa rồi.
Đối với proxy có tên người dùng và mật khẩu, thiết lập trong Playwright cũng rất đơn giản. Chỉ cần thêm các trường username và password trong Thông số proxy. Giả sử tên người dùng và mật khẩu lần lượt là foo và bar, thì cách thiết lập như sau:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
'server': 'http://127.0.0.1:7890',
'username': 'foo',
'password': 'bar'
})
page = browser.new_page()
page.goto('https://httpbin.org/get')
print(page.content())
browser.close()
Như vậy, chúng ta có thể thiết lập proxy xác thực cho Playwright một cách rất thuận tiện.
9. Tổng kết
Trên đây chúng tôi đã tổng kết cách sử dụng proxy cho từng thư viện request. Cách cấu hình giữa các thư viện nhìn chung khá giống nhau. Sau khi nắm được những phương pháp này, nếu sau này gặp vấn đề bị chặn IP, chúng ta có thể dễ dàng giải quyết bằng cách thêm proxy.
Bằng cách sử dụng máy chủ proxy đặt tại các vị trí địa lý khác nhau, bạn có thể mô phỏng việc thu thập dữ liệu từ nhiều khu vực khác nhau và lấy dữ liệu của từng vùng cụ thể. Điều này đặc biệt hữu ích cho các tác vụ cần dữ liệu liên quan đến vị trí địa lý. Khi dùng máy chủ proxy, bạn có thể ẩn địa chỉ IP thật của trình thu thập dữ liệu, từ đó tránh bị website chặn truy cập hoặc giới hạn tần suất. Điều này cũng giúp bảo vệ quyền riêng tư và an toàn của bạn. Một số website ngăn chặn crawler bằng cách nhận diện và chặn quá nhiều yêu cầu từ cùng một địa chỉ IP. Sử dụng máy chủ proxy có thể vượt qua cơ chế chống thu thập dữ liệu như vậy, cho phép bạn thu thập dữ liệu với tốc độ nhanh hơn và tỷ lệ thành công cao hơn.