scrapy学习(1)

最近学习了scrapy的编写,记录在这里


这个爬虫的目的是爬取之前推荐系统项目获得的用户列表后,分别爬取他们的主页,获得各自想读的书。


首先通过 scrapy startproject tutorial创建一个爬虫项目,我用的是eclipse+pydev,直接在eclipse里打开项目

我的项目叫scrapytest

首先编写item类,在scrapytest下新建item类CourseItems.py

代码如下:

import scrapy

class CourseItem(scrapy.Item):
    author=scrapy.Field()
    url=scrapy.Field()
    title=scrapy.Field()



然后在spider目录下创建MySpider类,继承scrapy.spider,代码如下:



import scrapy
#引入容器
from scrapytest.CourseItems import CourseItem


class MySpider(scrapy.Spider):
    #设置name
    name = "MySpider"
    #设定域名
    allowed_domains = ["douban.com"]
    #填写爬取地址
    start_urls = []
    
    def start_requests(self):
        f=open("C:/Users/xuwei/Desktop/scrapyfile.txt",'r')
        line=f.readline()
        while line:            #由于我要检索的url是之前已经爬到的,所以直接用这种方式爬取所需的url
            attr=line.split('\t')
            print(attr[3])
            self.start_urls.append(attr[3])
            line=f.readline()
        for url in self.start_urls:
            yield self.make_requests_from_url(url)
    
    #编写爬取方法
    def parse(self, response):
        author=response.xpath('//title[1]/text()').extract()[0]
        author=author.replace('\n','')
        print(author)
        for sel in response.xpath('//div[text()="想读"]/following-sibling::*[1]/li'):  #这里是抓取了想读标签的后一个标签
            item=CourseItem()
            item['author']=author
            item['url']=sel.xpath('a/@href').extract()           
            item['title']=sel.xpath('a/@title').extract()
            print(item)
            yield(item)
          
          


    这样MySpider类就写好了


由于爬到的内容最后要存储起来,所以要写个pipeline类,把内容存储起来

import json
import codecs

class MyPipeline(object):
    def __init__(self):
        self.file=codecs.open('data.txt',mode='wb',encoding='utf-8')   
    def process_item(self,item,spider):
        #这里没按json存储,json要存储中文有要ascii=false的一段
        self.file.write(item['author']+'\t'+item['url'][0]+'\t'+item['title'][0].replace('\n',' ')+'\n')
        return item


           之后就可以运行了,在cli界面输入scrapy crawl MySpider

就可以得到文件了,格式如下:

阿瞌 https://book.douban.com/subject/4140380/第七重解答  La Septieme Hypothese
阿瞌 https://book.douban.com/subject/4038672/络新妇之理(上)  絡新婦の理〈上〉
阿瞌 https://book.douban.com/subject/3162513/魍魉之匣(上)
阿瞌 https://book.douban.com/subject/1391509/裸阳
阿瞌 https://book.douban.com/subject/26923390/长夜难明
紫府清都自在天 https://book.douban.com/subject/2029893/德国浪漫主义诗人抒情诗选
紫府清都自在天 https://book.douban.com/subject/1050953/德国浪漫主义作品选
紫府清都自在天 https://book.douban.com/subject/3632624/德国浪漫主义时期童话研究
紫府清都自在天 https://book.douban.com/subject/26718531/论德国浪漫派
紫府清都自在天 https://book.douban.com/subject/26696459/德国浪漫主义文学理论
we are https://book.douban.com/subject/27104959/离开的,留下的
we are https://book.douban.com/subject/27104799/怪物书  Monsterboka
we are https://book.douban.com/subject/27015807/请坐
we are https://book.douban.com/subject/1314464/艺林散叶续编
we are https://book.douban.com/subject/1314465/艺林散叶
寒尽 https://book.douban.com/subject/20452428/塔罗逆位牌  The Complete Book of Tarot Reversals
寒尽 https://book.douban.com/subject/25953711/跟着大师学塔罗
寒尽 https://book.douban.com/subject/25855068/塔羅解牌字典(精裝版)  丹尼爾
寒尽 https://book.douban.com/subject/25953712/塔罗牌经典手册
寒尽 https://book.douban.com/subject/1345589/塔羅占卜全書
噢雪慝 https://book.douban.com/subject/25813166/无限与视角  Infinity and Perspective
噢雪慝 https://book.douban.com/subject/6772248/想象的共同体(增订版)  Imagined Communities: Reflections on the Origin and Spread of Nationalism
噢雪慝 https://book.douban.com/subject/3408505/在黑夜的死寂中歌唱
噢雪慝 https://book.douban.com/subject/26463891/心碎是爱情最美的样子
噢雪慝 https://book.douban.com/subject/1795079/乡土中国

          


PS:连接豆瓣要把请求包装成浏览器发送,所以要在settings中加入:

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'

此外,要把pipelines写入setting里:


ITEM_PIPELINES = {
    'scrapytest.MyPipelines.MyPipeline': 1,
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值