Trị liệu - Nhện

Sự miêu tả

Spider là một lớp chịu trách nhiệm xác định cách theo dõi các liên kết thông qua một trang web và trích xuất thông tin từ các trang.

Các trình thu thập thông tin mặc định của Scrapy như sau:

vật liệu trị liệu.

Nó là một con nhện mà từ đó mọi con nhện khác phải kế thừa. Nó có lớp sau:

class scrapy.spiders.Spider

Bảng sau đây cho thấy các trường của lớp scrapy.

Sr.No Trường & Mô tả
1

name

Nó là tên của con nhện của bạn.

2

allowed_domains

Đây là danh sách các miền mà con nhện thu thập thông tin.

3

start_urls

Đó là danh sách các URL, sẽ là gốc rễ cho những lần thu thập thông tin sau này, nơi con nhện sẽ bắt đầu thu thập thông tin từ đó.

4

custom_settings

Đây là những cài đặt, khi chạy spider, sẽ bị ghi đè khỏi cấu hình toàn dự án.

5

crawler

Nó là một thuộc tính liên kết đến đối tượng Crawler mà đối tượng spider được ràng buộc.

6

settings

Đây là những cài đặt để chạy một con nhện.

7

logger

Nó là một trình ghi nhật ký Python được sử dụng để gửi thông báo nhật ký.

số 8

from_crawler(crawler,*args,**kwargs)

Nó là một phương thức lớp, tạo ra con nhện của bạn. Các thông số là -

  • crawler - Một trình thu thập thông tin mà cá thể nhện sẽ bị ràng buộc.

  • args(list)- Các đối số này được truyền cho phương thức _init_ () .

  • kwargs(dict)- Các đối số từ khóa này được truyền cho phương thức _init_ () .

9

start_requests()

Khi không có URL cụ thể nào được chỉ định và con nhện được mở để loại bỏ, Scrapy sẽ gọi phương thức start_requests () .

10

make_requests_from_url(url)

Nó là một phương pháp được sử dụng để chuyển đổi url thành yêu cầu.

11

parse(response)

Phương pháp này xử lý phản hồi và trả về dữ liệu đã loại bỏ theo các URL khác.

12

log(message[,level,component])

Nó là một phương pháp gửi thông báo nhật ký thông qua trình ghi nhật ký nhện.

13

closed(reason)

Phương thức này được gọi khi spider đóng lại.

Đối số Spider

Đối số Spider được sử dụng để chỉ định URL bắt đầu và được chuyển bằng lệnh thu thập thông tin với -a tùy chọn, được hiển thị như sau:

scrapy crawl first_scrapy -a group = accessories

Đoạn mã sau minh họa cách một con nhện nhận các đối số:

import scrapy 

class FirstSpider(scrapy.Spider): 
   name = "first" 
   
   def __init__(self, group = None, *args, **kwargs): 
      super(FirstSpider, self).__init__(*args, **kwargs) 
      self.start_urls = ["http://www.example.com/group/%s" % group]

Nhện chung

Bạn có thể sử dụng các trình thu thập thông tin chung để phân loại các trình thu thập thông tin của mình. Mục đích của họ là theo dõi tất cả các liên kết trên trang web dựa trên các quy tắc nhất định để trích xuất dữ liệu từ tất cả các trang.

Đối với các ví dụ được sử dụng trong các trình thu thập thông tin sau, hãy giả sử chúng ta có một dự án với các trường sau:

import scrapy 
from scrapy.item import Item, Field 
  
class First_scrapyItem(scrapy.Item): 
   product_title = Field() 
   product_link = Field() 
   product_description = Field()

CrawlSpider

CrawlSpider xác định một tập hợp các quy tắc để tuân theo các liên kết và loại bỏ nhiều hơn một trang. Nó có lớp sau:

class scrapy.spiders.CrawlSpider

Sau đây là các thuộc tính của lớp CrawlSpider:

quy tắc

Đây là danh sách các đối tượng quy tắc xác định cách trình thu thập thông tin theo liên kết.

Bảng sau đây cho thấy các quy tắc của lớp CrawlSpider:

Sr.No Quy tắc & Mô tả
1

LinkExtractor

Nó chỉ định cách spider theo các liên kết và trích xuất dữ liệu.

2

callback

Nó sẽ được gọi sau mỗi trang được cạo.

3

follow

Nó chỉ định có tiếp tục theo các liên kết hay không.

parse_start_url (phản hồi)

Nó trả về một trong hai mục hoặc đối tượng yêu cầu bằng cách cho phép phân tích cú pháp các phản hồi ban đầu.

Note - Đảm bảo bạn đổi tên hàm phân tích cú pháp khác với phân tích cú pháp trong khi viết các quy tắc vì hàm phân tích cú pháp được CrawlSpider sử dụng để thực hiện logic của nó.

Hãy xem ví dụ sau, nơi spider bắt đầu thu thập thông tin trang chủ của demoexample.com, thu thập tất cả các trang, liên kết và phân tích cú pháp bằng phương thức parse_items -

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class DemoSpider(CrawlSpider):
   name = "demo"
   allowed_domains = ["www.demoexample.com"]
   start_urls = ["http://www.demoexample.com"]
      
   rules = ( 
      Rule(LinkExtractor(allow =(), restrict_xpaths = ("//div[@class = 'next']",)),
         callback = "parse_item", follow = True),
   )
   
   def parse_item(self, response):
      item = DemoItem()
      item["product_title"] = response.xpath("a/text()").extract()
      item["product_link"] = response.xpath("a/@href").extract()
      item["product_description"] = response.xpath("div[@class = 'desc']/text()").extract()
      return items

XMLFeedSpider

Đây là lớp cơ sở cho các trình thu thập dữ liệu thu thập dữ liệu từ các nguồn cấp dữ liệu XML và lặp qua các nút. Nó có lớp sau:

class scrapy.spiders.XMLFeedSpider

Bảng sau đây cho thấy các thuộc tính lớp được sử dụng để đặt một trình lặp và tên thẻ:

Sr.No Thuộc tính & Mô tả
1

iterator

Nó xác định trình lặp sẽ được sử dụng. Nó có thể là iternodes, html hoặc xml . Mặc định là iternodes .

2

itertag

Nó là một chuỗi có tên nút để lặp.

3

namespaces

Nó được định nghĩa bởi danh sách các bộ giá trị (prefix, uri) tự động đăng ký không gian tên bằng phương thức register_namespace () .

4

adapt_response(response)

Nó nhận phản hồi và sửa đổi nội dung phản hồi ngay khi nó đến từ phần mềm trung gian của spider, trước khi spider bắt đầu phân tích cú pháp nó.

5

parse_node(response,selector)

Nó nhận phản hồi và một bộ chọn khi được gọi cho mỗi nút phù hợp với tên thẻ được cung cấp.

Note - Spider của bạn sẽ không hoạt động nếu bạn không ghi đè phương thức này.

6

process_results(response,results)

Nó trả về một danh sách các kết quả và phản hồi do con nhện trả về.

CSVFeedSpider

Nó lặp qua từng hàng của nó, nhận tệp CSV dưới dạng phản hồi và gọi phương thức parse_row () . Nó có lớp sau:

class scrapy.spiders.CSVFeedSpider

Bảng sau đây cho thấy các tùy chọn có thể được đặt liên quan đến tệp CSV:

Sr.No Tùy chọn & Mô tả
1

delimiter

Nó là một chuỗi chứa dấu phân cách bằng dấu phẩy (',') cho mỗi trường.

2

quotechar

Nó là một chuỗi chứa dấu ngoặc kép ('"') cho mỗi trường.

3

headers

Nó là một danh sách các câu lệnh mà từ đó các trường có thể được trích xuất.

4

parse_row(response,row)

Nó nhận được một phản hồi và mỗi hàng cùng với một khóa cho tiêu đề.

Ví dụ về CSVFeedSpider

from scrapy.spiders import CSVFeedSpider
from demoproject.items import DemoItem  

class DemoSpider(CSVFeedSpider): 
   name = "demo" 
   allowed_domains = ["www.demoexample.com"] 
   start_urls = ["http://www.demoexample.com/feed.csv"] 
   delimiter = ";" 
   quotechar = "'" 
   headers = ["product_title", "product_link", "product_description"]  
   
   def parse_row(self, response, row): 
      self.logger.info("This is row: %r", row)  
      item = DemoItem() 
      item["product_title"] = row["product_title"] 
      item["product_link"] = row["product_link"] 
      item["product_description"] = row["product_description"] 
      return item

SitemapSpider

SitemapSpider với sự trợ giúp của Sơ đồ trang web thu thập thông tin một trang web bằng cách định vị URL từ robots.txt. Nó có lớp sau:

class scrapy.spiders.SitemapSpider

Bảng sau đây hiển thị các trường của SitemapSpider:

Sr.No Trường & Mô tả
1

sitemap_urls

Danh sách các URL mà bạn muốn thu thập thông tin trỏ đến sơ đồ trang web.

2

sitemap_rules

Nó là một danh sách các bộ giá trị (regex, callback), trong đó regex là một biểu thức chính quy và gọi lại được sử dụng để xử lý các URL khớp với một biểu thức chính quy.

3

sitemap_follow

Đây là danh sách các regex của sơ đồ trang web cần theo dõi.

4

sitemap_alternate_links

Chỉ định các liên kết thay thế được theo dõi cho một url.

Ví dụ về SitemapSpider

SitemapSpider sau xử lý tất cả các URL -

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/sitemap.xml"]  
   
   def parse(self, response): 
      # You can scrap items here

SitemapSpider sau xử lý một số URL có lệnh gọi lại -

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/sitemap.xml"] 
   
   rules = [ 
      ("/item/", "parse_item"), 
      ("/group/", "parse_group"), 
   ]  
   
   def parse_item(self, response): 
      # you can scrap item here  
   
   def parse_group(self, response): 
      # you can scrap group here

Đoạn mã sau hiển thị các sơ đồ trang web trong tệp robots.txt có url /sitemap_company -

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/robots.txt"] 
   rules = [ 
      ("/company/", "parse_company"), 
   ] 
   sitemap_follow = ["/sitemap_company"]  
   
   def parse_company(self, response): 
      # you can scrap company here

Bạn thậm chí có thể kết hợp SitemapSpider với các URL khác như được hiển thị trong lệnh sau.

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/robots.txt"] 
   rules = [ 
      ("/company/", "parse_company"), 
   ]  
   
   other_urls = ["http://www.demoexample.com/contact-us"] 
   def start_requests(self): 
      requests = list(super(DemoSpider, self).start_requests()) 
      requests += [scrapy.Request(x, self.parse_other) for x in self.other_urls] 
      return requests 

   def parse_company(self, response): 
      # you can scrap company here... 

   def parse_other(self, response): 
      # you can scrap other here...