Scraping وب با پایتون و Requests-HTML (به همراه مثال)

پایتون 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 کتابخانه

سئو PBN | خبر های جدید سئو و هک و سرور