网络爬虫三

scrapy 是一个流行的网络爬虫框架

一,创建项目 在终端输入

scrapy startproject example   (example为项目名)

cd  example

此时会生成几个文件

二,定义模型

example/items.py文件包含如下代码

# -*- coding: utf-8 -*-

import scrapy

#存储想要抓取的信息
class ExampleItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    population = scrapy.Field()
    

三,创建爬虫

$ scrapy genspider country example webscraping.com --template=crawl

传入爬虫名 ,域名,以及可选的模板参数,可自动生成country.py文件,然后再添加响应的爬虫代码

country.py

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from example.items import ExampleItem
class CountrySpider(CrawlSpider):
    name = 'country' #定义爬虫名称的字符串
    allowed_domains = ['example.webscraping.com'] #可爬取的域名列表
    start_urls = ['http://example.webscraping.com/'] #爬虫起始URL列表

    rules = (
        Rule(LinkExtractor(allow='/index/', deny='/user/'), follow=True),
        Rule(LinkExtractor(allow='/view/', deny='/user/'),callback='parse_item')
    )#正则表达式集合,告知爬虫要跟踪哪些链接

#从响应中获取数据 ,这里采用css解析
    def parse_item(self, response):
		item = ExampleItem()
		name_css = 'tr#places_country_row td.w2p_fw::text'
		item['name'] = response.css(name_css).extract()
		pop_css = 'tr#places_population_row td.w2p_fw::text'
		item['population'] = response.css(pop_css).extract()
		return item
       

 

优化设置:

避免爬虫被禁,需要更新scrapy的设置,避免爬虫被封禁,默认情况下,scrapy 对同一域名允许最多8个并发下载,并且两次之间没有延迟

所以需要在example/settings.py中加入以下代码,使爬虫同时只能对每个域名发起一个请求,并且没两次请求之间存在延时

CONCURRENT_REQUESTS_PER_DOMAIN =1

DOWNLOAD_DELAY = 5

运行  $scrapy crawl country --output=countries.csv -s LOG_LEVEL=INFO

此时数据会自动保存在csv文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值