八戒你干嘛 发表于 2019-6-17 17:34:15

Scrapy框架架构[2]

完成的爬虫代码:
[*]爬虫部分代码:import scrapy
from abcspider.items import QsbkItem

class QsbkSpider(scrapy.Spider):
   name = 'qsbk'
   allowed_domains = ['qiushibaike.com']
   start_urls = ['https://www.qiushibaike.com/text/']

   def parse(self, response):
         outerbox = response.xpath("//div[@id='content-left']/div")
         items = []
         for box in outerbox:
             author = box.xpath(".//div//h2/text()").extract_first().strip()
             content = box.xpath(".//div[@class='content']/span/text()").extract_first().strip()
             item = QsbkItem()
             item["author"] = author
             item["content"] = content
             items.append(item)
         return items
2. items.py部分代码: import scrapy
class QsbkItem(scrapy.Item):
   author = scrapy.Field()
   content = scrapy.Field()3. pipeline部分代码: import json

class AbcspiderPipeline(object):
       def __init__(self):

      self.items = []

   def process_item(self, item, spider):
   self.items.append(dict(item))
   print("="*40)
   return item

   def close_spider(self,spider):
   with open('qsbk.json','w',encoding='utf-8') as fp:
         json.dump(self.items,fp,ensure_ascii=False)
运行scrapy项目:运行scrapy项目。需要在终端,进入项目所在的路径,然后scrapy crawl [爬虫名字]即可运行指定的爬虫。如果不想每次都在命令行中运行,那么可以把这个命令写在一个文件中。以后就在pycharm中执行运行这个文件就可以了。比如现在新创建一个文件叫做start.py,然后在这个文件中填入以下代码:


from scrapy import cmdline

cmdline.execute("scrapy crawl qsbk".split())CrawlSpider在上一个糗事百科的爬虫案例中。我们是自己在解析完整个页面后获取下一页的url,然后重新发送一个请求。有时候我们想要这样做,只要满足某个条件的url,都给我进行爬取。那么这时候我们就可以通过CrawlSpider来帮我们完成了。CrawlSpider继承自Spider,只不过是在之前的基础之上增加了新的功能,可以定义爬取的url的规则,以后scrapy碰到满足条件的url都进行爬取,而不用手动的yield Request。
CrawlSpider爬虫:创建CrawlSpider爬虫:之前创建爬虫的方式是通过scrapy genspider [爬虫名字] [域名]的方式创建的。如果想要创建CrawlSpider爬虫,那么应该通过以下命令创建:


scrapy genspider -c crawl [爬虫名字] [域名]LinkExtractors链接提取器:使用LinkExtractors可以不用程序员自己提取想要的url,然后发送请求。这些工作都可以交给LinkExtractors,他会在所有爬的页面中找到满足规则的url,实现自动的爬取。以下对LinkExtractors类做一个简单的介绍:


class scrapy.linkextractors.LinkExtractor(
      allow = (),
      deny = (),
      allow_domains = (),
      deny_domains = (),
      deny_extensions = None,
      restrict_xpaths = (),
      tags = ('a','area'),
      attrs = ('href'),
      canonicalize = True,
      unique = True,
      process_value = None
)主要参数讲解:

[*]allow:允许的url。所有满足这个正则表达式的url都会被提取。
[*]deny:禁止的url。所有满足这个正则表达式的url都不会被提取。
[*]allow_domains:允许的域名。只有在这个里面指定的域名的url才会被提取。
[*]deny_domains:禁止的域名。所有在这个里面指定的域名的url都不会被提取。
[*]restrict_xpaths:严格的xpath。和allow共同过滤链接。








Miss_love 发表于 2020-12-30 15:12:26

支持分享
页: [1]
查看完整版本: Scrapy框架架构[2]