TA的每日心情 | 无聊 2024-9-19 09:07 |
---|
签到天数: 11 天 连续签到: 2 天 [LV.3]测试连长
|
完成的爬虫代码:爬虫部分代码: - 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[contains(@class,'author')]//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共同过滤链接。
|
|