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)