כיצד לבנות סורק אינטרנט בסיסי לשליפת מידע מאתר אינטרנט

כיצד לבנות סורק אינטרנט בסיסי לשליפת מידע מאתר אינטרנט

תוכניות הקוראות מידע מאתרים, או סורקי אינטרנט, מכילות כל מיני יישומים שימושיים. אתה יכול לגרד מידע על מניות, ציוני ספורט, טקסט מחשבון טוויטר או למשוך מחירים מאתרי קניות.





כתיבת תוכניות סריקת אינטרנט אלה היא קלה יותר מכפי שאתה עשוי לחשוב. ל- Python יש ספרייה נהדרת לכתיבת סקריפטים שחולצים מידע מאתרים. בואו נסתכל כיצד ליצור סורק אינטרנט באמצעות Scrapy.





התקנת Scrapy

מחורבן היא ספריית פייתון שנוצרה כדי לגרד את הרשת ולבנות סורקי אינטרנט. הוא מהיר, פשוט ויכול לנווט בין דפי אינטרנט מרובים ללא מאמץ רב.





Scrapy זמין דרך ספריית Pip Installs Python (PIP), להלן רענון כיצד להתקין PIP ב- Windows, Mac ו- Linux .

עדיפות להשתמש בסביבה וירטואלית של פייתון מכיוון שהיא תאפשר לך להתקין את Scrapy בספרייה וירטואלית שמשאירה את קבצי המערכת לבד. התיעוד של סקראפי ממליץ לעשות זאת כדי להשיג את התוצאות הטובות ביותר.



צור ספרייה ואתחל סביבה וירטואלית.

אנדרואיד 7 העברת אפליקציות לכרטיס sd
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

כעת תוכל להתקין את Scrapy בספרייה זו באמצעות פקודת PIP.





pip install scrapy

בדיקה מהירה לוודא ש- Scrapy מותקן כראוי

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

כיצד לבנות סורק אינטרנט

עכשיו כשהסביבה מוכנה אתה יכול להתחיל לבנות את סורק האינטרנט. בואו לגרד קצת מידע מדף ויקיפדיה על סוללות: https://en.wikipedia.org/wiki/Battery_(electricity) .





השלב הראשון בכתיבת סורק הוא הגדרת מחלקת פייתון המשתרעת מ עכביש . זה נותן לך גישה לכל הפונקציות והתכונות ב- Scrapy. בואו נקרא למעמד הזה עכביש 1 .

כיתת עכביש זקוקה לכמה פיסות מידע:

  • ל שֵׁם לזיהוי העכביש
  • ל start_urls משתנה המכיל רשימה של כתובות אתרים שניתן לסרוק ממנה (כתובת האתר של ויקיפדיה תהיה הדוגמה במדריך זה)
  • ל לְנַתֵחַ() שיטה המשמשת לעיבוד דף האינטרנט לחילוץ מידע
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

בדיקה מהירה לוודא שהכל פועל כמו שצריך.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

כיבוי הרישום

הפעלת Scrapy עם המעמד הזה מדפיסה מידע יומן שלא יעזור לך כרגע. בואו נעשה את זה פשוט על ידי הסרת מידע יומן עודף זה. תשתמש ב אַזהָרָה הצהרה על ידי הוספת קוד לתחילת הקובץ.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

כעת כאשר תריץ את הסקריפט שוב, פרטי היומן לא יודפסו.

שימוש ב- Chrome Inspector

הכל בדף אינטרנט מאוחסן ברכיבי HTML. האלמנטים מסודרים במודל Object Object Document (DOM). הבנת ה- DOM היא קריטית להפקת המרב מסורק האינטרנט שלך. סורק אינטרנט מחפש את כל רכיבי ה- HTML בדף כדי למצוא מידע, ולכן חשוב לדעת כיצד הם מסודרים.

ל- Google Chrome יש כלים שעוזרים לך למצוא רכיבי HTML מהר יותר. אתה יכול לאתר את ה- HTML של כל רכיב שאתה רואה בדף האינטרנט באמצעות המפקח.

  • נווט לדף ב- Chrome
  • הנח את העכבר על האלמנט שברצונך לצפות בו
  • לחץ לחיצה ימנית ובחר לִבדוֹק מהתפריט

צעדים אלה יפתחו את מסוף המפתחים עם אלמנטים הכרטיסייה נבחרה. בתחתית הקונסולה, תראה עץ של אלמנטים. עץ זה הוא איך תקבל מידע על התסריט שלך.

חילוץ הכותרת

בואו נגרום לתסריט לעבוד בשבילנו; זחילה פשוטה כדי לקבל את טקסט הכותרת של דף האינטרנט.

התחל את הסקריפט על ידי הוספת קוד כלשהו ל- לְנַתֵחַ() שיטה שחולצת את הכותרת.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

ה תְגוּבָה טיעון תומך בשיטה שנקראת CSS () שבוחר רכיבים מהדף באמצעות המיקום שאתה מספק.

בדוגמה זו, האלמנט הוא h1.firstHeading . מוֹסִיף

::text

לתסריט זה מה שנותן לך את תוכן הטקסט של האלמנט. סוף - סוף, ה לחלץ() שיטה מחזירה את הרכיב שנבחר.

הפעלת תסריט זה ב- Scrapy מדפיסה את הכותרת בצורת טקסט.

[u'Battery (electricity)']

מציאת התיאור

כעת, לאחר שגרדנו את טקסט הכותרת בואו נעשה יותר עם התסריט. הסורק ימצא את הפסקה הראשונה אחרי הכותרת ויחלץ מידע זה.

להלן עץ האלמנטים במסוף המפתחים של Chrome:

העתק תמונות מהאייפון למחשב
div#mw-content-text>div>p

החץ הימני (>) מציין מערכת יחסים בין הורה לילד בין האלמנטים.

מיקום זה יחזיר את כל עמ רכיבים תואמים, הכולל את כל התיאור. כדי לקבל את הראשון עמ אלמנט אתה יכול לכתוב את הקוד הזה:

response.css('div#mw-content-text>div>p')[0]

בדיוק כמו הכותרת, אתה מוסיף חולץ CSS

::text

כדי לקבל את תוכן הטקסט של האלמנט.

response.css('div#mw-content-text>div>p')[0].css('::text')

הביטוי הסופי משתמש לחלץ() כדי להחזיר את הרשימה. אתה יכול להשתמש ב- Python לְהִצְטַרֵף() פונקציה להצטרף לרשימה לאחר השלמת כל הסריקה.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

התוצאה היא הפסקה הראשונה של הטקסט!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

איסוף נתוני JSON

Scrapy יכול לחלץ מידע בצורת טקסט, וזה שימושי. Scrapy מאפשר לך גם להציג את הנתונים של JavaScript Object Objectation (JSON). JSON היא דרך מסודרת לארגן מידע ונמצאת בשימוש נרחב בפיתוח אתרים. JSON עובד די יפה עם Python גם כן.

כאשר עליך לאסוף נתונים כ- JSON, תוכל להשתמש ב תְשׁוּאָה הצהרה מובנית ב- Scrapy.

לפניכם גרסה חדשה של התסריט באמצעות הצהרת תשואה. במקום לקבל את רכיב p הראשון בפורמט טקסט, זה יתפוס את כל רכיבי p ויארגן אותו בפורמט JSON.

מהי האפליקציה הפופולרית ביותר בעולם
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

כעת תוכל להפעיל את העכביש על ידי ציון קובץ JSON פלט:

scrapy runspider spider3.py -o joe.json

התסריט ידפיס כעת את כל רכיבי ה- p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

גירוד מרכיבים מרובים

עד כה סורק האינטרנט גירד את הכותרת וסוג אחד של רכיב מהדף. סקראפי יכול גם לחלץ מידע מסוגי אלמנטים שונים בתסריט אחד.

בואו לחלץ את להיטי ה- IMDb Box Office המובילים לסוף שבוע. המידע הזה נמשך http://www.imdb.com/chart/boxoffice , בטבלה עם שורות לכל מדד.

ה לְנַתֵחַ() שיטה יכולה לחלץ יותר משדה אחד מהשורה. בעזרת כלי המפתחים של Chrome תוכל למצוא את האלמנטים המקוננים בתוך הטבלה.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

ה תמונה בורר מציין זאת img הוא צאצא של td.posterColumn . כדי לחלץ את התכונה הנכונה, השתמש בביטוי | _+_ |.

הפעלת העכביש מחזירה את JSON:

::attr(src)

עוד מגרדי אינטרנט ובוטים

Scrapy היא ספרייה מפורטת שיכולה לבצע כמעט כל סוג של סריקה באינטרנט שאתה מבקש ממנה. כשזה מגיע למציאת מידע ברכיבי HTML, בשילוב עם התמיכה של פייתון, קשה לנצח. בין אם אתה בונה סורק אינטרנט או לומד על היסודות של גירוד אתרים הגבול היחיד הוא כמה אתה מוכן ללמוד.

אם אתה מחפש דרכים נוספות לבנות סורקים או בוטים תוכל לנסות בנה בוטים של טוויטר ואינסטגרם באמצעות פייתון . Python יכול לבנות כמה דברים מדהימים בפיתוח אתרים, ולכן כדאי לחרוג מסורקי אינטרנט בעת חקר השפה הזו.

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל 15 פקודות שורת הפקודה של Windows (CMD) שאתה חייב לדעת

שורת הפקודה היא עדיין כלי רב עוצמה של Windows. להלן פקודות CMD השימושיות ביותר שכל משתמש Windows צריך לדעת.

קרא הבא
נושאים קשורים
  • תִכנוּת
  • כלי מנהלי אתרים
  • תִכנוּת
  • פִּיתוֹן
  • הדרכות קידוד
  • סורקי אינטרנט
על הסופר אנתוני גרנט(פורסמו 40 מאמרים)

אנתוני גרנט הוא כותב עצמאי העוסק בתכנות ותוכנה. הוא בעל מדעי המחשב העוסק בתכנות, אקסל, תוכנה וטכנולוגיה.

עוד מאת אנתוני גרנט

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה