爬虫-scrapy初试

初步操作:

scrapy startproject hello (创建hello项目)
scrapy genspider chouti  dig.chouti.com 创建一个spider
scrapy crawl chouti运行spider  指定运行chouti这个项目
 
 
import scrapy
import sys
import io
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
from scrapy.selector import Selector,HtmlXPathSelector
from scrapy.http import Request
from ..items import WormItem
引用

 

 
进到spider 里面 写 chouti.py
域名已经 被程序写好 
内容都在response里面,
我们直接通过选择器 去拿就行
from scrapy.selector import Selector,HtmlXPathSelector

#拿到单页的所有标签
        item_list=Selector(response=response).xpath('//div[@id="content-list"]/div[@class="item"]')
        for item in item_list:
            title=item.xpath('.//a[@class="show-content color-chag"]/text()').extract_first().strip()
            chouti_url=item.xpath('.//a[@class="show-content color-chag"]/@href').extract_first().strip()
            # a_list=item.xpath('.*//a[@class="show-content"]/text()').extract_first()
            item_obj=WormItem(title=title,url=chouti_url)
            return item_obj
抽屉文章的url 和title

 

然后需要翻页;
原理就是拿到当前页面 所有的 页面链接的值,然后去重
在 类属性里面定义一个 空set() ,因为 程序启动 只会执行一次类方法,所以不用担心被覆盖

拿到那些地址后,交给回调函数 重复操作
#拿页码
        #拿本页的所有页码
        page_l=Selector(response=response).xpath('//div[@id="dig_lcpage"]//a/@href').extract()

        for page in page_l:
            page = 'http://dig.chouti.com' + page
            #判断是不是重复
            if page not in self.url_set:
                self.url_set.add(page)
                #回调,   知识点: 类属性只有在程序执行的时候会加载,所以  类属性 url_set 不会刷掉
                yield Request(url=page,callback=self.parse)
拿页码

 

类属性:
class ChoutiSpider(scrapy.Spider):
name = 'chouti'
allowed_domains = ['dig.chouti.com']
start_urls = ['http://dig.chouti.com/']
url_set=set()


setttings中 放开注释: ##########不同的项目名称 关键字也不同
SPIDER_MIDDLEWARES = {
'worm.middlewares.WormSpiderMiddleware': 543,
}


item:
class WormItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title=scrapy.Field()
    url=scrapy.Field()
item

 




 
 
 
 
 
 
 

 

posted @ 2017-10-18 16:34  昂达达  阅读(149)  评论(1编辑  收藏  举报