پایتون Requests-HTML
کتابخانه یک ماژول اسکرپینگ وب است که درخواست های HTTP و همچنین رندر جاوا اسکریپت را ارائه می دهد.
در این آموزش خراش دادن وب، یاد می گیریم که چگونه یک وب سایت را با استفاده از پایتون خراش دهیم Requests-HTML
کتابخانه
ما اطلاعات اولیه را از یک وب سایت استخراج خواهیم کرد.
- عنوان
- H1
- پیوندها
- نویسنده
- ابتدایی
- Hreflang
- متا ربات تگ
- لینک های شکسته
می توانید کد کامل را در نوت بوک پایتون من پیدا کنید.
Web Scraping چیست؟
خراش دادن وب به معنای عمل از تجزیه محتوای یک صفحه وب برای استخراج اطلاعات خاص.
تجزیه به این معنی است که شما یک سند را برای توصیف نحو (به عنوان مثال ساختار HTML) تجزیه و تحلیل می کنید. بدون یک تجزیه کننده، سند HTML شما شبیه یک بلوک متن خواهد بود.
هنگامی که یک وب سایت را خراش می دهید، از سرور می خواهید که یک سند HTML را برای شما ارسال کند تجزیه برای درک اجزای سازنده (<head>
،<body>
،<title>
،<h1>
، و غیره.). هنگامی که ساختار درک شد، می توانید هر اطلاعاتی را که می خواهید بیرون بکشید.
Requests-HTML Library چیست؟
را requests-HTML
کتابخانه یک تجزیه کننده HTML است که به شما امکان می دهد از آن استفاده کنید انتخابگرهای CSS و انتخابگرهای XPath برای استخراج اطلاعات مورد نظر از یک صفحه وب. همچنین ظرفیت اجرای جاوا اسکریپت را ارائه می دهد.
کتابخانه ها را نصب و بارگذاری کنید
در این آموزش از requests
کتابخانه برای “تماس” URL با درخواست HTTP به سرورها، requests-HTML
کتابخانه به تجزیه داده ها و pandas
کتابخانه برای کار با اطلاعات خراشیده شده
pip install requests requests-HTML urlparse4
فراخوانی URL With requests.get()
استفاده کنید HTMLSession()
برای مقداردهی اولیه درخواست های GET و .get()
تابع از requests
برای فراخوانی URL برای خراشیدن.
در اینجا، من یک مثال با معرفی شگفت انگیز هملت باتیستا برای پست پایتون می زنم.
فقط برای اطمینان از عدم وجود خطا، یک را اضافه می کنم try
و except
بیانیه ای برای بازگشت یک خطا در هر صورت کد کار نمی کند.
ما پاسخ را در متغیری به نام ذخیره می کنیم response
.
import requests
from requests_html import HTMLSession
url = "https://www.searchenginejournal.com/introduction-to-python-seo-spreadsheets/342779/"
try:
session = HTMLSession()
response = session.get(url)
except requests.exceptions.RequestException as e:
print(e)
ساختار توابع خراش دادن
ساختار requests-HTML
فراخوان تجزیه به این صورت است:
variable.attribute.function(*selector*, parameters)
را variable
نمونه ای است که با استفاده از آن ایجاد کردید .get(url)
تابع.
را attribute
نوع محتوایی است که می خواهید استخراج کنید (html
/ lxml
).
را requests-HTML
تجزیه کننده همچنین دارای بسیاری از داخلی مفید است methods
برای سئوکاران
- پیوندها: دریافت تمام پیوندهای یافت شده در یک صفحه (محافظه ها شامل).
- absolute_links: دریافت همه پیوندهای یافت شده در یک صفحه (لنگرها حذف نمی شوند).
- پیدا کردن(): یافتن یک عنصر خاص در یک صفحه با انتخابگر CSS.
- xpath(): دریافت عناصر با استفاده از تابع Xpath.
در اینجا، ما می خواهیم استفاده کنیم find()
با html
ویژگی “یافتن” <title>
با استفاده از 'title'
انتخابگر CSS و لیستی از عناصر را برگردانید ([<Element 'title' >]
).
title = response.html.find('title')
print(title)
# [<Element 'title' >]
برای چاپ به عنوان واقعی، باید از شاخص با استفاده از text
صفت.
print(title[0].text)
# An Introduction to Python for SEO Pros Using Spreadsheets
این همان استفاده از است first
پارامتر در function
در یک لاینر
title = response.html.find('title', first=True).text
print(title)
# An Introduction to Python for SEO Pros Using Spreadsheets
برای استخراج توضیحات متا از یک صفحه، از آن استفاده می کنیم xpath()
عملکرد با //meta[@name="description"]/@content
Xpath.
meta_desc = response.html.xpath('//meta[@name="description"]/@content')
print(meta_desc)
# ["Learn Python basics while studying code John Mueller recently shared that populates Google Sheets. We'll also modify his code to add a simple visualization."]
استخراج همه پیوندها از یک صفحه وب
را absolute_links
تابع به ما امکان می دهد همه پیوندها را به استثنای لنگرهای یک وب سایت استخراج کنیم.
links = response.html.absolute_links
print(links)
با استفاده از نقطه می توانید اطلاعات خاصی را از یک صفحه استخراج کنید (.
) نماد برای انتخاب یک کلاس یا پوند (#
) نماد برای انتخاب شناسه.
در اینجا ما قصد داریم نام نویسنده را با استفاده از کلاس استخراج کنیم.
author = response.html.find('.post-author', first=True).text
print(author)
# Hamlet Batista
استخراج لینک متعارف
canonical = response.html.xpath("//link[@rel='canonical']/@href")
print(canonical)
# ['https://www.searchenginejournal.com/introduction-to-python-seo-spreadsheets/342779/']
Hreflang را استخراج کنید
hreflang = response.html.xpath("//link[@rel='alternate']/@hreflang")
print(hreflang)
استخراج متا ربات ها
meta_robots = response.html.xpath("//meta[@name='ROBOTS']/@content")
print(meta_robots)
# ['NOODP']
برای استخراج اطلاعات در یک مکان خاص، می توانید DOM را با استفاده از انتخابگرهای CSS حفاری کنید.
get_nav_links = response.html.find('a.sub-m-cat span')
ما یک حلقه for ایجاد خواهیم کرد تا در تمام شاخص های موجود در آن حلقه بزنیم nav_links
لیست کنید و متن را به لیست دیگری به نام اضافه کنید nav_links
.
nav_links = []
for i in range(len(get_nav_links)):
x = get_nav_links[i].text
nav_links.append(x)
nav_links
# ['SEO', 'PPC', 'CONTENT', 'SOCIAL', 'NEWS', 'ADVERTISE', 'MORE']
یک زیربخش از یک صفحه را در یک متغیر ذخیره کنید
اگر محتوایی که می خواهید استخراج کنید همیشه در یک مطلب خاص است <div>
، می توانید مسیر را در یک متغیر ذخیره کنید تا آن را فراخوانی کنید.
در اینجا، من پیوندهایی را که در محتوای واقعی یک پست هستند، با “ذخیره” آن استخراج می کنم post-342779
مقاله در متغیری به نام article
.
article = response.html.find('article.cis_post_item_initial.post-342779', first=True)
article_links = article.xpath('//a/@href')
مطالعه موردی: استخراج پیوندهای شکسته
import re
import requests
from requests_html import HTMLSession
from urllib.parse import urlparse
# Get Domain Name With urlparse
url = "https://www.jobillico.com/fr/partenaires-corporatifs"
parsed_url = urlparse(url)
domain = parsed_url.scheme + "://" + parsed_url.netloc
# Get URL
session = HTMLSession()
r = session.get(url)
# Extract Links
jlinks = r.html.xpath('//a/@href')
# Remove bad links and replace relative path for absolute path
updated_links = []
for link in jlinks:
if re.search(".*@.*|.*javascript:.*|.*tel:.*",link):
link = ""
elif re.search("^(?!http).*",link):
link = domain + link
updated_links.append(link)
else:
updated_links.append(link)
اکنون زمان استخراج لینک های شکسته و افزودن آنها به یک لیست است.
broken_links = []
for link in updated_links:
print(link)
try:
requests.get(link, timeout=10).status_code
if requests.get(link, timeout=10).status_code != 200:
broken_links.append(link)
except requests.exceptions.RequestException as e:
print(e)
broken_links
جایگزین Requests-HTML
بسیاری از کتابخانههای پایتون وجود دارد که میتوان از آنها برای اسکراپینگ وب استفاده کرد.
- درخواست های پایتون: انجام درخواست های HTTP
- Python BeautifulSoup: Parsing Library
- Python Selenium: کتابخانه خراش دادن وب مبتنی بر مرورگر
- Python Scrapy: چارچوب Web Scraping که شامل قابلیت های خزیدن بازگشتی است
اسکریپت اسکرپینگ وب خود را خودکار کنید
برای خودکار کردن اسکراپینگ وب، اسکریپت پایتون خود را در زمانبندی وظایف ویندوز زمانبندی کنید، یا اسکریپت پایتون را با استفاده از CRON در مک، خودکار کنید.
سایر راهنماهای فنی سئو با پایتون
مقالات مرتبط با وب اسکرپینگ
این پایان این آموزش پایتون در مورد خراش دادن وب با این است requests-HTML
کتابخانه
استراتژیست سئو در Tripadvisor، Seek سابق (ملبورن، استرالیا). متخصص در سئو فنی. در تلاش برای سئوی برنامهریزی شده برای سازمانهای بزرگ از طریق استفاده از پایتون، R و یادگیری ماشین.