Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การขูดเว็บโดยใช้ Python และ Scrapy?


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

การติดตั้ง

การติดตั้ง scrapy ใน windows นั้นง่ายมาก เราสามารถใช้ pip หรือ conda (ถ้าคุณมีอนาคอนด้า) Scrapy ทำงานบนทั้ง python 2 และ 3 เวอร์ชัน

pip ติดตั้ง Scrapy

หรือ

conda install –c conda-forge scrapy

หากติดตั้ง Scrapy อย่างถูกต้อง คำสั่ง scrapy จะพร้อมใช้งานในเทอร์มินัล -

C:\Users\rajesh>scrapyScrapy 1.6.0 - ไม่มีโปรเจ็กต์ที่ใช้งานอยู่Usage:scrapy  [ตัวเลือก] [args]คำสั่งที่ใช้ได้:bench เรียกใช้การทดสอบเกณฑ์มาตรฐานอย่างรวดเร็ว ดึง URL โดยใช้ Scrapy downloadergenspider สร้างสไปเดอร์ใหม่โดยใช้ pre- templatesrunspider ที่กำหนดไว้ เรียกใช้แมงมุมที่มีในตัวเอง (โดยไม่ต้องสร้างโปรเจ็กต์) การตั้งค่า รับการตั้งค่า เชลล์ ขูดแบบโต้ตอบ consolestartproject สร้างโปรเจ็กต์ใหม่ รุ่น Print Scrapy ดูเวอร์ชันเปิด URL ในเบราว์เซอร์ ตามที่เห็นโดย Scrapy[ เพิ่มเติม ] มีคำสั่งเพิ่มเติมเมื่อเรียกใช้จากไดเรกทอรีโครงการ ใช้ "scrapy  -h" เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง

การเริ่มต้นโครงการ

เมื่อติดตั้ง Scrapy แล้ว เราสามารถเรียกใช้ โครงการเริ่มต้น คำสั่งเพื่อสร้างโครงสร้างเริ่มต้นสำหรับโครงการ Scrapy แรกของเรา

ในการดำเนินการนี้ ให้เปิดเทอร์มินัลแล้วไปที่ไดเร็กทอรีที่คุณต้องการจัดเก็บโครงการ Scrapy ของคุณ จากนั้นเรียกใช้ scrapy startproject . ด้านล่างฉันกำลังใช้ scrapy_example สำหรับชื่อโครงการ -

C:\Users\rajesh>scrapy startproject scrapy_exampleNew Scrapy project 'scrapy_example' โดยใช้ไดเร็กทอรีเทมเพลต 'c:\python\python361\lib\site-packages\scrapy\templates\project' สร้างใน:C:\Users \rajesh\scrapy_exampleคุณสามารถเริ่มต้นสไปเดอร์ตัวแรกด้วย:cd scrapy_examplescrapy genspider example.comC:\Users\rajesh>cd scrapy_exampleC:\Users\rajesh\scrapy_example>tree /FFolder PATH listingVolume หมายเลขซีเรียลคือ 8CD6-8D39C:.│ เหม็น cfg│└───scrapy_example │ items.py │ Middlewares.py │ pipes.py │ settings.py │ __init__.py │ ├───แมงมุม │ │ __init__.py │ │ │ └───__pycache__ └─── __pycache__

อีกวิธีหนึ่งคือเราเรียกใช้ scrapy shell และทำ web scrapping ดังตัวอย่างด้านล่าง -

ใน [18]:fetch ("https://www.wsj.com/india")019-02-04 22:38:53 [scrapy.core.engine] DEBUG:Crawled (200) " rel="nofollow noopener noreferrer" target="_blank">https://www.wsj.com/india> (ผู้อ้างอิง:ไม่มี) 

โปรแกรมรวบรวมข้อมูลที่มีปัญหาจะส่งคืนวัตถุ "การตอบสนอง" ที่มีข้อมูลที่ดาวน์โหลด มาดูกันว่าโปรแกรมรวบรวมข้อมูลด้านบนของเรามีอะไรบ้าง -

In [19]:view(response)Out[19]:True

และในเบราว์เซอร์เริ่มต้นของคุณ ลิงก์ของเว็บจะเปิดขึ้นและคุณจะเห็นบางอย่างเช่น −

การขูดเว็บโดยใช้ Python และ Scrapy?

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

ทีนี้มาดูว่าโปรแกรมรวบรวมข้อมูลของเรามีอะไรบ้าง -

ใน [22]:print(response.text)  The Wall Street Journal &ข่าวด่วน ธุรกิจ ข่าวการเงินและเศรษฐกิจ ข่าวโลกและวิดีโอ    <ชื่อ meta ="viewport" content ="initial-scale =1.0001, maximum-scale =1.0001, maximum-scale =1.0001, user-scalable =no" data-reactid =".2316x0ul96e.0.3"/>   <ชื่อ meta ="page.site" content ="wsj" data-reactid =".2316x0ul96e.0.7"/> <ชื่อ meta =" page.site.product" content ="WSJ" data-reactid =".2316x0ul96e.0.8"/>          <ชื่อเมตา =" twitter:site" content ="@wsj" data-reactid =".2316x0ul96e.0.c:$6"/>  …&อื่นๆ อีกมากมาย: 

มาลองดึงข้อมูลสำคัญสองสามอย่างจากหน้าเว็บนี้กัน -

กำลังขยายชื่อหน้าเว็บ −

Scrapy มีวิธีดึงข้อมูลจาก HTML ตามตัวเลือก css เช่น class, id เป็นต้น หากต้องการค้นหาตัวเลือก css สำหรับชื่อหน้าเว็บใดๆ เพียงคลิกขวาแล้วคลิกตรวจสอบ เช่นด้านล่าง:

การขูดเว็บโดยใช้ Python และ Scrapy?

นี่จะเป็นการเปิดเครื่องมือสำหรับนักพัฒนาในหน้าต่างเบราว์เซอร์ของคุณ -

การขูดเว็บโดยใช้ Python และ Scrapy?

อย่างที่เห็น css class "wsj-headline-link" ถูกนำไปใช้กับแท็ก anchor() ทั้งหมดที่มีชื่อ ด้วยข้อมูลนี้ เราจะพยายามค้นหาชื่อทั้งหมดจากเนื้อหาที่เหลือในวัตถุตอบกลับ -

การขูดเว็บโดยใช้ Python และ Scrapy?

response.css() คือฟังก์ชันที่จะดึงเนื้อหาตามตัวเลือก css ที่ส่งผ่าน (เช่นแท็ก anchor ด้านบน) มาดูตัวอย่างเพิ่มเติมเกี่ยวกับฟังก์ชัน response.css ของเรากัน

ใน [24]:response.css(".wsj-headline-link::text")).extract_first()Out[24]:'China Fears Loom Over Stocks After January Surge'

และ

ใน [25]:response.css(".wsj-headline-link").extract_first()Out[25]:'ความกลัวของจีน Loom Over Stocks หลังเดือนมกราคม Surge
'

หากต้องการรับลิงก์ทั้งหมดจากหน้าเว็บ −

links =response.css('a::attr(href)').extract()

ผลลัพธ์

['https://www.google.com/intl/en_us/chrome/browser/desktop/index.html','https://support.apple.com/downloads/','https:// www.mozilla.org/en-US/firefox/new/','https://windows.microsoft.com/en-us/internet-explorer/download-ie','https://www.barrons.com ','https://bigcharts.marketwatch.com','https://www.wsj.com/public/page/wsj-x-marketing.html','https://www.dowjones.com/' ,'https://global.factiva.com/factivalogin/login.asp?productname=global','https://www.fnlondon.com/','https://www.mansionglobal.com/',' https://www.marketwatch.com','https://newsplus.wsj.com','https://privatemarkets.dowjones.com','https://djlogin.dowjones.com/login.asp? productname=rnc','https://www.wsj.com/conferences','https://www.wsj.com/pro/centralbanking','https://www.wsj.com/video/', 'https://www.wsj.com','https://www.bigdecisions.com/','https://www.businessspectator.com.au/','https://www.checkout51.com /?utm_source=wsj&utm_medium=digitalhousead&utm_campaign=wsjspotlight','https://www.harpercollins.com/','https://housing. com/','https://www.makaan.com/','https://nypost.com/','https://www.newsamerica.com/','https://www.proptiger. com','https://www.rea-group.com/',…………

หากต้องการรับความคิดเห็นจากหน้าเว็บ wsj(wall street journel) -

ใน [38]:response.css(".wsj-comment-count::text")).extract()Out[38]:['71', '59']

ด้านบนนี้เป็นเพียงข้อมูลเบื้องต้นเกี่ยวกับการขูดเว็บผ่าน scrapy เราทำอะไรได้มากกว่านั้นด้วย scrapy