Scrapy - ตัวแยกลิงค์

คำอธิบาย

ตามชื่อที่ระบุ Link Extractors คืออ็อบเจ็กต์ที่ใช้เพื่อแยกลิงก์จากเว็บเพจโดยใช้ scrapy.http.Responseวัตถุ ใน Scrapy มีตัวแยกในตัวเช่นscrapy.linkextractors นำเข้า LinkExtractor. คุณสามารถปรับแต่งตัวแยกลิงค์ของคุณเองตามความต้องการของคุณโดยใช้อินเทอร์เฟซที่เรียบง่าย

ตัวแยกลิงก์ทุกตัวมีวิธีการสาธารณะที่เรียกว่า extract_linksซึ่งรวมถึงอ็อบเจ็กต์ Response และส่งกลับรายการ scrapy.link.Link อ็อบเจ็กต์ คุณสามารถสร้างอินสแตนซ์ตัวแยกลิงก์ได้เพียงครั้งเดียวและเรียกใช้เมธอด extract_links หลาย ๆ ครั้งเพื่อแยกลิงก์ที่มีการตอบสนองที่แตกต่างกัน CrawlSpiderclass ใช้ตัวแยกลิงก์กับชุดของกฎที่มีจุดประสงค์หลักเพื่อแยกลิงก์

การอ้างอิงของ Link Extractor ในตัว

โดยปกติตัวแยกลิงค์จะถูกจัดกลุ่มด้วย Scrapy และมีให้ในโมดูล scrapy.linkextractors โดยค่าเริ่มต้นตัวแยกลิงก์จะเป็น LinkExtractor ซึ่งมีความเท่าเทียมกันในการทำงานกับ LxmlLinkExtractor -

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow = (), deny = (), 
   allow_domains = (), deny_domains = (), deny_extensions = None, restrict_xpaths = (), 
   restrict_css = (), tags = ('a', 'area'), attrs = ('href', ), 
   canonicalize = True, unique = True, process_value = None)

LxmlLinkExtractorเป็นระบายลิงค์ขอแนะนำเพราะมีตัวเลือกการกรองที่มีประโยชน์และมีการใช้งานที่มีประสิทธิภาพ HTMLParser lxml ของ

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

allow (นิพจน์ทั่วไป (หรือรายการ))

อนุญาตให้มีนิพจน์เดียวหรือกลุ่มของนิพจน์ที่ควรตรงกับ url ที่จะแยกออกมา หากไม่ได้กล่าวถึงจะตรงกับลิงก์ทั้งหมด

2

deny (นิพจน์ทั่วไป (หรือรายการ))

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

3

allow_domains (str หรือรายการ)

อนุญาตให้มีสตริงเดียวหรือรายการของสตริงที่ควรตรงกับโดเมนที่จะแยกลิงก์

4

deny_domains (str หรือรายการ)

บล็อกหรือไม่รวมสตริงเดี่ยวหรือรายการสตริงที่ควรตรงกับโดเมนที่ลิงก์จะไม่ถูกแยกออก

5

deny_extensions (รายการ)

บล็อกรายการสตริงที่มีส่วนขยายเมื่อแยกลิงก์ หากไม่ได้ตั้งค่าตามค่าเริ่มต้นระบบจะตั้งค่าเป็นIGNORED_EXTENSIONSซึ่งมีรายการที่กำหนดไว้ล่วงหน้าในแพ็คเกจscrapy.linkextractors

6

restrict_xpaths (str หรือรายการ)

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

7

restrict_css (str หรือรายการ)

มันทำงานคล้ายกับพารามิเตอร์ restrict_xpaths ซึ่งจะดึงลิงก์จากพื้นที่ที่เลือก CSS ภายในการตอบสนอง

8

tags (str หรือรายการ)

แท็กเดียวหรือรายการแท็กที่ควรพิจารณาเมื่อแยกลิงก์ โดยค่าเริ่มต้นจะเป็น ('a', 'area')

9

attrs (รายการ)

ควรพิจารณาแอตทริบิวต์เดี่ยวหรือรายการแอตทริบิวต์ขณะแยกลิงก์ โดยค่าเริ่มต้นจะเป็น ('href',)

10

canonicalize (บูลีน)

url ที่สกัดได้จะถูกนำไปใช้รูปแบบมาตรฐานscrapy.utils.url.canonicalize_url โดยค่าเริ่มต้นจะเป็น True

11

unique (บูลีน)

จะใช้หากลิงก์ที่แยกออกมาซ้ำ

12

process_value (โทรได้)

เป็นฟังก์ชันที่รับค่าจากแท็กและแอตทริบิวต์ที่สแกน ค่าที่ได้รับอาจมีการเปลี่ยนแปลงและส่งคืนมิฉะนั้นจะไม่มีการส่งคืนเพื่อปฏิเสธลิงก์ หากไม่ได้ใช้โดยค่าเริ่มต้นจะเป็น lambda x: x

ตัวอย่าง

รหัสต่อไปนี้ใช้เพื่อแยกลิงค์ -

<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>

สามารถใช้ฟังก์ชันรหัสต่อไปนี้ใน process_value -

def process_value(val): 
   m = re.search("javascript:goToPage\('(.*?)'", val) 
   if m: 
      return m.group(1)