初步操作:
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
然后需要翻页;
原理就是拿到当前页面 所有的 页面链接的值,然后去重
在 类属性里面定义一个 空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()