วิธีสร้างโปรแกรมรวบรวมข้อมูลเว็บพื้นฐานเพื่อดึงข้อมูลจากเว็บไซต์

วิธีสร้างโปรแกรมรวบรวมข้อมูลเว็บพื้นฐานเพื่อดึงข้อมูลจากเว็บไซต์

โปรแกรมที่อ่านข้อมูลจากเว็บไซต์หรือโปรแกรมรวบรวมข้อมูลเว็บมีแอปพลิเคชันที่เป็นประโยชน์ทุกประเภท คุณสามารถขูดข้อมูลหุ้น ผลการแข่งขันกีฬา ข้อความจากบัญชี Twitter หรือดึงราคาจากเว็บไซต์ช้อปปิ้ง





การเขียนโปรแกรมรวบรวมข้อมูลเว็บเหล่านี้ง่ายกว่าที่คุณคิด Python มีห้องสมุดที่ยอดเยี่ยมสำหรับการเขียนสคริปต์ที่ดึงข้อมูลจากเว็บไซต์ มาดูวิธีสร้างโปรแกรมรวบรวมข้อมูลเว็บโดยใช้ Scrapy





การติดตั้ง Scrapy

Scrapy เป็นไลบรารี Python ที่สร้างขึ้นเพื่อขูดเว็บและสร้างโปรแกรมรวบรวมข้อมูลเว็บ รวดเร็ว เรียบง่าย และสามารถนำทางผ่านหน้าเว็บหลายหน้าได้โดยไม่ต้องใช้ความพยายามมาก





Scrapy มีอยู่ในไลบรารี Pip Installs Python (PIP) นี่คือการทบทวน วิธีการติดตั้ง PIP บน Windows, Mac และ Linux .

แนะนำให้ใช้ Python Virtual Environment เพราะจะช่วยให้คุณสามารถติดตั้ง Scrapy ในไดเร็กทอรีเสมือนที่ปล่อยให้ไฟล์ระบบของคุณอยู่คนเดียว เอกสารของ Scrapy แนะนำให้ทำเช่นนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด



สร้างไดเร็กทอรีและเริ่มต้นสภาพแวดล้อมเสมือน

แหล่งซื้อแมคมือสองที่ดีที่สุด
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)
...

วิธีสร้างโปรแกรมรวบรวมข้อมูลเว็บ

เมื่อสภาพแวดล้อมพร้อมแล้ว คุณสามารถเริ่มสร้างโปรแกรมรวบรวมข้อมูลเว็บได้ มาขูดข้อมูลบางส่วนจากหน้า Wikipedia เกี่ยวกับแบตเตอรี่: https://en.wikipedia.org/wiki/Battery_(ไฟฟ้า) .





ขั้นตอนแรกในการเขียนโปรแกรมรวบรวมข้อมูลคือการกำหนดคลาส Python ที่ขยายจาก Scrapy.แมงมุม . สิ่งนี้ช่วยให้คุณเข้าถึงฟังก์ชันและคุณสมบัติทั้งหมดใน Scrapy เรียกชั้นนี้ว่า แมงมุม1 .

คลาสสไปเดอร์ต้องการข้อมูลสองสามชิ้น:

  • ถึง ชื่อ เพื่อระบุตัวแมงมุม
  • ถึง start_urls ตัวแปรที่มีรายการ URL ที่จะรวบรวมข้อมูล (URL Wikipedia จะเป็นตัวอย่างในบทช่วยสอนนี้)
  • ถึง แยกวิเคราะห์ () วิธีที่ใช้ประมวลผลหน้าเว็บเพื่อดึงข้อมูล
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

ทุกอย่างบนเว็บเพจถูกเก็บไว้ในองค์ประกอบ HTML องค์ประกอบถูกจัดเรียงใน Document Object Model (DOM) การทำความเข้าใจ DOM เป็นสิ่งสำคัญในการใช้ประโยชน์สูงสุดจากโปรแกรมรวบรวมข้อมูลเว็บของคุณ โปรแกรมรวบรวมข้อมูลเว็บจะค้นหาผ่านองค์ประกอบ HTML ทั้งหมดบนหน้าเว็บเพื่อค้นหาข้อมูล ดังนั้นการรู้ว่าองค์ประกอบเหล่านี้ถูกจัดเรียงอย่างไรจึงเป็นสิ่งสำคัญ

Google Chrome มีเครื่องมือที่ช่วยให้คุณค้นหาองค์ประกอบ HTML ได้เร็วขึ้น คุณสามารถค้นหา HTML สำหรับองค์ประกอบใดๆ ที่คุณเห็นบนหน้าเว็บโดยใช้ตัวตรวจสอบ

  • นำทางไปยังหน้าใน Chrome
  • วางเมาส์บนองค์ประกอบที่คุณต้องการดู
  • คลิกขวาและเลือก ตรวจสอบ จากเมนู

ขั้นตอนเหล่านี้จะเปิดคอนโซลนักพัฒนาซอฟต์แวร์ด้วยปุ่ม องค์ประกอบ แท็บที่เลือก ที่ด้านล่างของคอนโซล คุณจะเห็นแผนผังขององค์ประกอบ ต้นไม้นี้เป็นวิธีที่คุณจะได้รับข้อมูลสำหรับสคริปต์ของคุณ

การแยกชื่อเรื่อง

ให้สคริปต์ทำงานให้เรา รวบรวมข้อมูลง่ายๆ เพื่อรับข้อความชื่อเรื่องของหน้าเว็บ

เริ่มสคริปต์โดยเพิ่มโค้ดลงใน แยกวิเคราะห์ () วิธีการที่แยกชื่อ

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

NS การตอบสนอง อาร์กิวเมนต์รองรับวิธีการที่เรียกว่า ซีเอสเอส() ที่เลือกองค์ประกอบจากหน้าโดยใช้ตำแหน่งที่คุณระบุ

ในตัวอย่างนี้ อิลิเมนต์คือ h1.firstHeading . กำลังเพิ่ม

::text

สคริปต์คือสิ่งที่ให้เนื้อหาข้อความขององค์ประกอบ ในที่สุด สารสกัด() วิธีการส่งคืนองค์ประกอบที่เลือก

การเรียกใช้สคริปต์นี้ใน Scrapy จะพิมพ์ชื่อในรูปแบบข้อความ

[u'Battery (electricity)']

ค้นหาคำอธิบาย

ตอนนี้เราได้คัดลอกข้อความชื่อแล้ว มาทำเพิ่มเติมกับสคริปต์กัน โปรแกรมรวบรวมข้อมูลจะหาย่อหน้าแรกหลังจากชื่อและดึงข้อมูลนี้

นี่คือแผนผังองค์ประกอบในคอนโซลนักพัฒนาซอฟต์แวร์ Chrome:

วิธีถ่ายโอนข้อมูลจาก excel ไปยัง word โดยอัตโนมัติ
div#mw-content-text>div>p

ลูกศรขวา (>) ระบุความสัมพันธ์หลักและรองระหว่างองค์ประกอบ

สถานที่นี้จะส่งคืน . ทั้งหมด NS องค์ประกอบที่ตรงกัน ซึ่งรวมถึงคำอธิบายทั้งหมด เพื่อรับสิทธิ์ก่อน NS องค์ประกอบที่คุณสามารถเขียนรหัสนี้:

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 Data

Scrapy สามารถดึงข้อมูลในรูปแบบข้อความซึ่งเป็นประโยชน์ Scrapy ยังให้คุณดูข้อมูล JavaScript Object Notation (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
...

ขูดหลายองค์ประกอบ

จนถึงตอนนี้ โปรแกรมรวบรวมข้อมูลเว็บได้คัดลอกชื่อและองค์ประกอบหนึ่งประเภทจากหน้า Scrapy ยังสามารถดึงข้อมูลจากองค์ประกอบประเภทต่างๆ ได้ในสคริปต์เดียว

มาแยกรายการยอดนิยมของ IMDb Box Office ในช่วงสุดสัปดาห์กัน ข้อมูลนี้ดึงมาจาก http://www.imdb.com/chart/boxoffice ในตารางที่มีแถวสำหรับแต่ละเมตริก

NS แยกวิเคราะห์ () เมธอดสามารถแยกฟิลด์ได้มากกว่าหนึ่งฟิลด์จากแถว การใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ 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(),
}
...

NS ภาพ ตัวเลือกระบุว่า img เป็นทายาทของ td.posterColumn . หากต้องการแยกแอตทริบิวต์ที่ถูกต้อง ให้ใช้นิพจน์ |_+_|

การเรียกใช้แมงมุมส่งคืน JSON:

::attr(src)

เว็บแครปเปอร์และบอทเพิ่มเติม

Scrapy เป็นไลบรารีที่มีรายละเอียดซึ่งสามารถทำการรวบรวมข้อมูลเว็บประเภทใดก็ได้ที่คุณขอให้ทำ เมื่อพูดถึงการค้นหาข้อมูลในองค์ประกอบ HTML ร่วมกับการรองรับของ Python เป็นเรื่องยากที่จะเอาชนะได้ ไม่ว่าคุณจะสร้างโปรแกรมรวบรวมข้อมูลเว็บหรือเรียนรู้เกี่ยวกับพื้นฐานของการขูดเว็บ ข้อจำกัดเพียงอย่างเดียวคือคุณเต็มใจที่จะเรียนรู้มากเพียงใด

หากคุณกำลังมองหาวิธีเพิ่มเติมในการสร้างโปรแกรมรวบรวมข้อมูลหรือบอท คุณสามารถลอง สร้างบอท Twitter และ Instagram โดยใช้ Python . Python สามารถสร้างสิ่งที่น่าทึ่งบางอย่างในการพัฒนาเว็บ ดังนั้นจึงคุ้มค่าที่จะไปไกลกว่าโปรแกรมรวบรวมข้อมูลเว็บเมื่อสำรวจภาษานี้

แบ่งปัน แบ่งปัน ทวีต อีเมล 15 Windows Command Prompt (CMD) คำสั่งที่คุณต้องรู้

พรอมต์คำสั่งยังคงเป็นเครื่องมือ Windows ที่มีประสิทธิภาพ ต่อไปนี้คือคำสั่ง CMD ที่มีประโยชน์ที่สุดที่ผู้ใช้ Windows ทุกคนจำเป็นต้องรู้

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • เครื่องมือของผู้ดูแลเว็บ
  • การเขียนโปรแกรม
  • Python
  • บทเรียนการเข้ารหัส
  • โปรแกรมรวบรวมข้อมูลเว็บ
เกี่ยวกับผู้เขียน แอนโธนี่ แกรนท์(40 บทความที่ตีพิมพ์)

Anthony Grant เป็นนักเขียนอิสระที่ครอบคลุมการเขียนโปรแกรมและซอฟต์แวร์ เขาเป็นวิทยาการคอมพิวเตอร์ที่สำคัญในการเขียนโปรแกรม Excel ซอฟต์แวร์และเทคโนโลยี

เพิ่มเติมจาก Anthony Grant

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก