در این آموزش یاد می گیرید که اسکراپینگ وب چیست و چگونه وب سایت ها را با پایتون خراش دهید.
برای این آموزش، باید پایتون را نصب کنید.
Web Scraping چیست؟
خراش دادن وب فرآیند استفاده از یک ربات برای استخراج داده ها از یک وب سایت و صادرات آن به یک قالب قابل هضم است. یک وب اسکراپر کد HTML را از یک صفحه وب استخراج می کند، که سپس برای استخراج اطلاعات ارزشمند تجزیه می شود.
به طور خلاصه، معنای وب خراش دادن است استخراج داده ها از یک وب سایت.
چگونه می توان از پایتون برای اسکراپینگ وب استفاده کرد
پایتون یک زبان برنامه نویسی محبوب است که در اسکراپینگ وب مورد استفاده قرار می گیرد زیرا دارای چندین کتابخانه برای رسیدگی به درخواست های HTTP، تجزیه HTML و چارچوب های مبتنی بر مرورگر برای خراش دادن نسخه های رندر شده صفحات وب است. مفیدترین کتابخانه ها و چارچوب های موجود در پایتون برای اسکراپینگ وب عبارتند از:
- درخواست ها
- سوپ زیبا
- خراشیده
- سلنیوم
- جیغ زدن
نحوه عملکرد Web Scraping
اسکرپینگ وب با استخراج محتوای یک صفحه وب با استفاده از درخواست های HTTP و سپس تجزیه منبع (مانند HTML، json و غیره) به منظور استخراج اطلاعات ارزشمند کار می کند.
- درخواست محتوای یک صفحه وب (
requests
) - HTML را دانلود کنید
- تجزیه HTML (
BeautifulSoup
) - عناصر را از محتوای تجزیه شده استخراج کنید
کتابخانه های اسکراپینگ وب پایتون را نصب کنید
از pip برای نصب کتابخانه های خراش وب پایتون استفاده کنید: درخواست ها، زیبا سوپ، urllib و scrapy.
$ pip3 install requests urllib3 beautifulsoup4 scrapy lxml pyOpenSSL
مثال خراش وب پایتون
ساده ترین راه برای انجام اسکراپینگ وب در پایتون این است که یک صفحه وب با درخواست های پایتون واکشی کنید و HTML صفحه را با BeautifulSoup تجزیه کنید. مثال زیر به شما نشان می دهد که چگونه هر دو را انجام دهید قبل از اینکه به نمونه های دقیق تر خراش دادن وب بپردازیم.
اولین قدم در اسکراپینگ وب استخراج HTML صفحه است. این را می توان از طریق درخواست های HTTP یا برنامه های مبتنی بر مرورگر انجام داد. در این مثال، ما از درخواست های پایتون برای انجام یک درخواست HTTP و دریافت HTML یک صفحه وب در پاسخ HTTP استفاده می کنیم.
# Making an HTTP Request
import requests
# Define URL to fetch
url = 'https://crawler-test.com/'
# Make the Request
r = requests.get(url)
# Print the outpout
print('Status code: ', r.status_code)
print('Type: \n', type(r.text))
print('Text: \n', r.text[:200])
خروجی:
Status code: 200
Type:
<class 'str'>
Text:
<!DOCTYPE html>
<html>
<head>
<title>Crawler Test Site</title>
<meta content="en" HTTP-EQUIV="content-language"/>
<link type="text/css" href="/css/app.css" rel="styleshe
تجزیه HTML با BeautifulSoup
مرحله دوم در وب اسکرپینگ استخراج اطلاعات از یک سند است. به این میگن تجزیه. در این مثال، ما از کتابخانه BeautifulSoup پایتون برای تجزیه HTML صفحه بازگشتی قبلی در پاسخ HTTP استفاده میکنیم.
# Parsing an HTML
from bs4 import BeautifulSoup
# Parse the HTML
soup = BeautifulSoup(r.text, 'html.parser')
# Show type of the soup object
print('Type: \n', type(soup))
# Show HTML title
soup.find('title')
خروجی:
Type:
<class 'bs4.BeautifulSoup'>
<title>Crawler Test Site</title>
اکنون که اصول خراش دادن یک صفحه وب با پایتون را میدانیم، بیایید به تکنیکهای متعددی که میتوانیم برای انجام اسکراپی کردن وب انجام دهیم نگاهی بیندازیم.
HTML، CSS، جاوا اسکریپت و Xpath را درک کنید
قبل از اینکه بتوانید با Web Scraping در پایتون شروع کنید، باید حداقل درک اولیه ای از HTML، CSS، جاوا اسکریپت و Xpath داشته باشید.
با این درک، شما قادر خواهید بود از کد منبع و DOM برای استخراج خودکار داده ها از یک وب سایت استفاده کنید.
HTML برای Scraping وب
HTML مخفف HyperText Markup Language یک زبان نشانه گذاری است که برای ایجاد صفحات وب استفاده می شود.
هنگامی که از یک مرورگر برای باز کردن یک صفحه وب استفاده می کنید، هدف اصلی آن تفسیر فایل های HTML، CSS و جاوا اسکریپت و تبدیل آنها به یک وب سایت قابل استفاده است.
در زیر نحوه نمایش HTML مرورگر نشان داده شده است، جایی که تگ
در صفحه قابل مشاهده است.
HTML حاوی تگ های HTML (که با <> احاطه شده اند) است که ساختار درخت مانند صفحه وب را فراهم می کند.
تگ های HTML در قالبی ساختار یافته هستند که می توانیم از آن برای استخراج اطلاعات از یک صفحه وب استفاده کنیم.
نحوه استفاده از تگ های HTML در اسکراپینگ وب با پایتون
برای استفاده از داده های Scrape از یک صفحه وب با استفاده از تگ های HTML در پایتون، از
روش کتابخانه BeautifulSoup..find('tag_name')
# Show HTML title
soup.find('title')
اگر می خواهید در مورد HTML اطلاعات بیشتری کسب کنید، مقاله زیر را در مورد اصول اولیه html برای scraping وب مطالعه کنید.
CSS برای Scraping وب
CSS یا Cascading Style Sheets در توسعه وب برای توصیف نحوه نمایش عناصر بر روی صفحه استفاده می شود.
به عنوان مثال، در CSS، میتوانید از این قانون برای اعمال رنگ به تمام پیوندهای صفحهای که کلاسی به نام myclass دارند استفاده کنید.
a.myclass {
color: blue;
}
انتخابگرهای CSS یکی دیگر از قالبهای ساختاریافته است که میتواند در اسکراپینگ وب برای مکان یابی و استخراج عناصر در یک سند HTML استفاده شود.
در وب اسکرپینگ، می توانید از انتخابگرهای CSS که برای تغییر سبک صفحه استفاده می شد استفاده کنید تا هر عنصری از این انتخابگر را پیدا کنید.
نحوه استفاده از انتخابگرهای CSS در اسکرپینگ وب با پایتون
در پایتون، برای استخراج داده از یک سند HTML با استفاده از انتخابگر CSS آن، از select()
روش کتابخانه BeautifulSoup
شما همچنین می توانید استفاده کنید .css()
روش بر روی شی Scrapy Selector.
from scrapy import Selector
sel = Selector(text=html)
sel.css('p.hello').extract()
اگر می خواهید در مورد نحوه استفاده از انتخابگرهای CSS در Web Scraping اطلاعات بیشتری کسب کنید، مقاله من با عنوان: “مبانی مکان یاب CSS برای Web Scraping” را بخوانید.
XPath برای Web Scraping
Xpath یک زبان پرس و جو است که می تواند برای دسترسی به عناصر و ویژگی های مختلف یک XML یا یک سند HTML استفاده شود.
عبارات Xpath رشتههایی هستند که برای توصیف مکان یک عنصر (گره) یا چندین عنصر در یک سند HTML (یا XML) استفاده میشوند.
XPath به شما امکان می دهد عناصر دقیق را در یک سند HTML قرار دهید. همچنین توسط اکثر ابزارهای خراش دادن وب پشتیبانی می شود و آن را به یک ابزار فوق العاده مفید برای خراش دادن وب تبدیل می کند. به عنوان مثال، xpath زیر h1 را که در عنصر بدنه HTML یافت می شود، قرار می دهد:
نحوه استفاده از XPath در Web Scraping با پایتون
برای تجزیه HTML یک صفحه وب با XPath در پایتون، از lxml
کتابخانه پایتون:
from lxml import html
# Parse HTML with XPath
content = html.fromstring(r.content)
panels = content.xpath('//*[@class="panel-header"]')
شما همچنین می توانید استفاده کنید .xpath()
روش بر روی شی Scrapy Selector.
from scrapy import Selector
sel = Selector(text=html)
sel.xpath('//p').extract()
اگر می خواهید در مورد نحوه استفاده از XPath در Web Scraping بیشتر بدانید، مقاله من با عنوان: “اصول Xpath برای Web Scraping” را بخوانید.
روش های انجام Web Scraping در پایتون
راه های متعددی برای انجام وب اسکرپینگ در پایتون وجود دارد. میتوانید از یک زبان برنامهنویسی برای درخواست HTTP، استفاده از یک مرورگر وب با افزونه، استفاده از یک برنامه مرورگر یا کار با استفاده از خزنده وب استفاده کنید.
- درخواست های ساده HTTP (مثلا
requests
کتابخانه) - استفاده از مرورگر وب (مثلا
Selenium
) - استفاده از خزنده وب (به عنوان مثال Scrapy)
Scraping وب با درخواست های HTTP در پایتون
شما می توانید از درخواست های HTTP در پایتون برای برقراری ارتباط با سرور استفاده کنید requests
کتابخانه در پایتون
تنها کاری که باید انجام دهید این است که یک درخواست HTTP برای یک URL داده شده ارسال کنید و سرور وب پاسخی را با محتوای صفحه ارسال می کند.
درخواستهای HTTP به شما اجازه نمیدهند نسخه رندر شده صفحه را مشاهده کنید (پس از اجرای جاوا اسکریپت).
هنگامی که برخی از محتوا در پشت جاوا اسکریپت پنهان می شود، می خواهید از یک برنامه مرورگر برای خراش دادن وب سایت استفاده کنید.
اسکراپینگ وب با مرورگر در پایتون
این امکان وجود دارد که با نصب برنامهای که مرورگر شما را بارگیری میکند، یک وبسایت را خراش دهید (همانطور که وقتی کروم را باز میکنید این کار را انجام میدهید)، و به شما اجازه میدهد با استفاده از پایتون با وبسایت تعامل داشته باشید.
زمانی که نیاز دارید جاوا اسکریپت را در یک صفحه بارگیری کنید، اطلاعات ورود به سیستم را اضافه کنید یا آزمایشات را به طور خودکار در وب سایت خود انجام دهید، این بسیار مفید است.
برنامه های بسیاری وجود دارد که می توانند برای اسکراپینگ و اتوماسیون وب مبتنی بر مرورگر استفاده شوند:
- سلنیوم
- نمایشنامه نویس
- عروسک گردان
خراش دادن وب با استفاده از خزنده های وب در پایتون
خزنده های وب مانند Screaming Frog اساساً اسکراپرهای وب هستند. آنها بسیار قدرتمندتر از اسکرابرهای وب خانگی هستند. شما می توانید خزنده وب خود را در پایتون بسازید، اما به خاطر داشته باشید که می تواند بسیار پیچیده و بسیار سریع شود.
استفاده از راه حلی مانند Scrapy ساخت یک خزنده وب در پایتون را آسان تر می کند.
کتابخانه های خراش وب پایتون
پایتون مجموعه گسترده ای از کتابخانه ها دارد که می توانید از آنها در Web Scraping استفاده کنید:
- درخواست ها
- سوپ زیبا
- lxml
- سلنیوم
- خراشیده
- درخواست ها-HTML
در اکثر پروژه های اسکراپینگ وب شما فقط به تعدادی از آن کتابخانه ها نیاز خواهید داشت. در اینجا نمونه ای از تنظیمات کتابخانه خراش وب (از ساده ترین تا سخت ترین برای پیاده سازی) آورده شده است:
- از پایتون استفاده کنید
requests
کتابخانه با کتابخانه تجزیه کننده مانندBeautifulSoup
یاlxml
- استفاده کنید
Requests-HTML
با روش های تجزیه داخلی آن - استفاده کنید
Selenium
با روش های تجزیه داخلی آن - استفاده کنید
Scrapy
با روش های تجزیه داخلی آن
خراش دادن وب پایتون با درخواست ها
برای انجام اسکراپینگ وب در پایتون، از یک کتابخانه درخواست HTTP (مثلا درخواست ها) به همراه یک کتابخانه تجزیه کننده (مثلا BeautifulSoup) استفاده کنید یا از یک کتابخانه مبتنی بر مرورگر (مانند سلنیوم) استفاده کنید.
من یک آموزش ویدیویی دارم که به شما یاد می دهم چگونه با کتابخانه درخواست های پایتون اسکراپینگ وب را انجام دهید (یک جایگزین کتابخانه درخواست-HTML است).
اساساً تنها چیزی که نیاز دارید این است که:
پایتون را نصب کنید
کتابخانه درخواست ها را نصب کنید
این کد را برای واکشی یک صفحه وب اجرا کنید.
# import the request library
import requests
# Define your URL
url = 'https://crawler-test.com/'
# Fetch the page
response = requests.get(url)
# Show the Response
response.text
خروجی HTML صفحه وب در قالب یونیکد (متن) است.
خراش دادن وب پایتون با BeautifulSoup
برای تجزیه HTML صفحه با استفاده از BeautifulSoup در پایتون، کتابخانه را نصب کنید، HTML را با یک کتابخانه درخواست HTTP واکشی کنید و HTML را با استفاده از BeautifulSoup()
کلاس در HTML
ابتدا کتابخانه BeautifulSoup را نصب کنید.
$ pip3 install beautifulsoup4
پس از آن، bs4 را وارد کنید، صفحه را با آن تجزیه کنید و از روش های BeautifulSoup برای دریافت تگ های HTML مختلف از صفحه استفاده کنید.
# Fetch the HTML
import requests
url = 'https://crawler-test.com/'
response = requests.get(url)
# Import BeautifulSoup
from bs4 import BeautifulSoup
# Parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Extract any HTML tag
soup.find('title')
برای کسب اطلاعات بیشتر مقاله خراش دادن وب با BeautifulSoup را بخوانید
اسکراپینگ وب پایتون با lxml
در پایتون، lxml
کتابخانه یک کتابخانه تجزیه و تحلیل است که می تواند برای استخراج اطلاعات از HTML یا XML استفاده شود. از کتابخانه lxml می توان به عنوان جایگزینی برای BeautifulSoup
کتابخانه
برای استفاده از lxml
کتابخانه در پایتون، صفحه را با کتابخانه درخواست ها واکشی کنید و HTML را با آن تجزیه کنید html.fromstring()
روش.
را نصب کنید lxml
کتابخانه با پیپ
$ pip install lxml
نمایش متنی HTML را با fromstring()
روش.
import requests
from lxml import html
r = requests.get()
tree = html.fromstring(r.text)
مزیت lxml نسبت به BeautifulSoup این است که می توان از عبارات XPath برای استخراج داده ها استفاده کرد.
# Parse with XPath in lxml
html.xpath('//*[@class="panel-header"]')
خراش دادن وب پایتون با Requests-HTML
را requests-HTML
کتابخانه یک تجزیه کننده HTML است که به شما امکان می دهد از آن استفاده کنید انتخابگرهای CSS و عبارات XPath برای استخراج اطلاعات مورد نظر از یک صفحه وب. همچنین ظرفیت اجرای جاوا اسکریپت را ارائه می دهد.
برای خراش دادن یک صفحه وب در پایتون با کتابخانه requests-HTML، ابتدا کتابخانه های Python مورد نیاز را نصب کنید و سپس از HTMLSession()
کلاس شی جلسه را مقداردهی اولیه می کند. سپس یک درخواست GET را با استفاده از .get()
روش.
کتابخانه ها را نصب کنید
pip install requests requests-HTML urlparse4
وب سایت را با استفاده از آن خراش دهید HTMLSession()
در پایتون
# Scrape website with Requests-HTML
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://crawler-test.com/')
r.html.find('title')[0].text
اگر از یک نوت بوک Jupyter استفاده می کنید، ممکن است خطای زیر را دریافت کنید، در این صورت از AsyncHTMLSession استفاده کنید.
RuntimeError: Cannot use HTMLSession within an existing event loop.
خراش دادن وب پایتون با سلنیوم
برای استفاده از برنامه مرورگر وب Selenium برای انجام Web Scraping در پایتون، کتابخانه مورد نیاز و درایور وب را نصب کنید، ماژول webdriver را نمونه سازی کنید و از متد get() برای باز کردن مرورگر وب به صفحه وب استفاده کنید که می خواهید اطلاعات را از آن استخراج کنید. .
سلنیوم با باز کردن یک مرورگر کار می کند و یک صفحه وب را بارگیری می کند، درست مانند کاری که هنگام مرور وب انجام می دهید. به این ترتیب، صفحه را رندر می کند تا بتوانید هر چیزی را روی آن خراش دهید. سلنیوم برای خودکار کردن هر گونه فعالیت مرورگر باورنکردنی است.
برای استفاده از سلنیوم در Python Web Scraping، باید نصب کنید:
$ pip3 install webdriver-manager Selenium
و سپس این کد را اجرا کنید تا مثلا H1 صفحه نمایش داده شود.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
# Install Webdriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# Fetch page
driver.get('https://crawler-test.com/')
try:
# Get the span element
elem = driver.find_element(By.TAG_NAME, 'h1')
# Show scraped content
print(elem.text)
except Exception as e:
print('There was an error', e)
# Quit browser when done
driver.quit()
اگر می خواهید بیشتر بدانید، می توانید مقاله من در مورد نحوه استفاده از سلنیوم با پایتون را بخوانید.
خراش دادن وب پایتون با اسکرپی
برای خراش دادن صفحات وب با Scrapy در پایتون، خزنده وب سفارشی خود را در پایتون ایجاد کنید. شما باید کتابخانه مورد نیاز را نصب کنید و از پوسته scrapy یا همان استفاده کنید Selector()
هدف – شی.
ابتدا کتابخانه های پایتون مورد نیاز را نصب کنید.
$ pip3 install scrapy pyOpenSSL lxml
یک نمای کلی برای نشان دادن کارهایی که می توانید با Scrapy انجام دهید، باز کردن ترمینال و سپس اجرای دستور scrapy shell است.
و این چند دستور را امتحان کنید:
fetch('https://crawler-test.com/')
view(response)
response.status
print(response.text)
response.xpath('//title/text()').get()
همچنین میتوانید از شی Scrapy Selector با درخواستها برای خراش دادن یک صفحه وب استفاده کنید.
from scrapy import Selector
import requests
url = 'https://crawler-test.com/'
response = requests.get(url)
html = response.content
sel = Selector(text = html)
sel.xpath('//a/@href').extract()
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از Scrapy، آموزش من Scraping Web with Scrapy را بخوانید.
از پروکسی ها در وب اسکرپینگ با پایتون استفاده کنید
اسکرپینگ وب با پایتون بسیار سریع است و بار زیادی را روی سرورهای میزبان وارد می کند. بنابراین، شرکتها سعی میکنند تا جایی که ممکن است، اسکریپ وب و رباتها را مسدود کنند تا هزینهها را کاهش دهند و از کاهش سرعت تجربه کاربری خود جلوگیری کنند.
در برخی موارد آنها کپچا را اضافه می کنند، در موارد دیگر آنها عوامل کاربر را مسدود می کنند یا حتی یک IP را به طور کامل مسدود می کنند. بنابراین، اگر مقیاس وب اسکراپی را افزایش دهید، استفاده از IP های چرخشی و پراکسی ها بسیار مهم است.
برای استفاده از پراکسی ها در پایتون، باید پروکسی های رایگان از سایت هایی مانند پروکسی اسکریپ پیدا کنید که ممکن است بسیاری از آنها قبلاً مسدود شده باشند، یا یک سرویس پریمیوم خریداری کنید که IP های مورد نیاز را در اختیار شما قرار دهد:
هنگامی که پراکسی های خود را دارید، می توانید با ارسال یک دیکشنری به آن، با درخواست های پایتون از آنها استفاده کنید proxies
پارامتر از get()
درخواست.
import requests
url = 'https://crawler-test.com/'
proxies = {
'http': '128.199.237.57:8080'
}
r = requests.get(url, proxies=proxies)
مقالات مرتبط با وب اسکرپینگ
نتیجه
ما اکنون نحوه انجام وب اسکرپینگ با پایتون را توضیح داده ایم.
استراتژیست سئو در Tripadvisor، Seek سابق (ملبورن، استرالیا). متخصص در سئو فنی. در تلاش برای سئوی برنامهریزی شده برای سازمانهای بزرگ از طریق استفاده از پایتون، R و یادگیری ماشین.