学习网站:麦子scrapy第九集

1.item.py的定义

import scrapy


class XiciItem(scrapy.Item):
    IP=scrapy.Field()
    PORT=scrapy.Field()
    POSITION=scrapy.Field()
    TYPE=scrapy.Field()
    SPEED=scrapy.Field()
    LAST_CHECK_TIME=scrapy.Field()

2.spider的编写

# -*- coding: utf-8 -*-
import scrapy
from XiCi.items import XiciItem

class XiciSpider(scrapy.Spider):
    name = "xici"
    allowed_domains = ["xicidaili.com"]
    start_urls = (
        'http://www.xicidaili.com',
    )
    
    def start_requests(self):#作用:生成初始的request
        reqs=[]#定义resqs(空集)
        
        for i in range(1,206):#设置变量:页码1到206
            req=scrapy.Request("http://www.xicidaili.com/nn/%s"%i)
            reqs.append(req)#生成的request放到resqs中
        
        return reqs#返回reqs
    
    def parse(self, response):
        #提取每一行的xpath位置
        ip_list=response.xpath('//table[@id="ip_list"]')#ip_list=xpath提取(table标签下的"ip_list"属性)
        
        trs = ip_list[0].xpath('tr')#变量trs=ip_list加入tr标签
        
        items=[]#定义items空集
        
        for ip in trs[1:]:#ip的tr从[1以后开始]
            pre_item=XiciItem()#pre_item=加载XiCiItem()
            
            pre_item['IP'] = ip.xpath('td[3]/text()')[0].extract()#取文字
            
            pre_item['PORT'] = ip.xpath('td[4]/text()')[0].extract()#取文字
            
            pre_item['POSITION'] = ip.xpath('string(td[5])')[0].extract().strip()
            
            pre_item['TYPE'] = ip.xpath('td[7]/text()')[0].extract()
            #speed取到td的title属性,再用正则(匹配到数字)
            pre_item['SPEED'] = ip.xpath(
                'td[8]/div[@class="bar"]/@title').re('\d{0,2}\.\d{0,}')[0]
                
            pre_item['LAST_CHECK_TIME'] = ip.xpath('td[10]/text()')[0].extract()
            
            items.append(pre_item)#把pre_item添加到项目
            
        return items#返回项目

3.保存成csv

scrapy crawl xici -o xici.csv

4.结果输出

图片描述


叫我瞄大人
467 声望81 粉丝

喜欢追星的非科班的编程爱好者