最近学习了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,
}