作業(yè)代碼
spider.py
# -*- coding: utf-8 -*-
import scrapy
from jianshu.items import JianshuItem
import sys
import re
import requests
import json
class WeekSpider(scrapy.Spider):
name = "weekhot"
def start_requests(self):
for i in range(1, 6):
self.url = 'http://www.reibang.com/trending/weekly?&page=%s' % i
yield scrapy.Request(self.url, self.get_url)
def get_url(self, response):
base_url = 'http://www.reibang.com'
total_url = response.xpath('//a[@class="title"]').extract()
for i in total_url:
link = b = re.findall('href="(.*?)">', i, re.S)[0]
url = base_url + link
yield scrapy.Request(url,callback=self.parse)
def parse(self, response):
#total = response.xpath('//div[@class="content"]')
#item = []
item = JianshuItem()
item['author'] = response.xpath('//span[@class="name"]/a/text()').extract()
item['post_date'] = response.xpath('//span[@class="publish-time"]/text()').extract()
item['wordage'] = response.xpath('//span[@class="wordage"]/text()').extract()
item['title'] = response.xpath('//div[@class="article"]/h1/text()').extract()
item['read_num'] = re.search('views_count":(.*?),', response.text, re.S).group()
item['comment_num'] = re.search('comments_count":(.*?),', response.text, re.S).group()
item['like_num'] = re.search('likes_count":(.*?),', response.text, re.S).group()
# 獲取專題信息
id = re.findall('{"id":(.*?),', response.text, re.S)[0]
url = 'http://www.reibang.com/notes/%s/included_collections?page=1' % id
datas = []
result = requests.get(url)
data = json.loads(result.text)
for one in data['collections']:
datas.append(one['title'])
count = data['total_pages']
for one in range(2, count + 1):
url = 'http://www.reibang.com/notes/{}/included_collections?page={}'.format(id, one)
result = requests.get(url)
data = json.loads(result.text)
for one in data['collections']:
datas.append(one['title'])
try:
item['zhuanti'] = " ".join(datas).encode('utf-8')
except:
item['sp_title'] = u''
yield item
item.py
import scrapy
class JianshuItem(scrapy.Item):
# define the fields for your item here like:
author = scrapy.Field()
post_date = scrapy.Field()
title = scrapy.Field()
read_num = scrapy.Field()
comment_num = scrapy.Field()
like_num = scrapy.Field()
作業(yè)結(jié)果
作業(yè)思路梳理
越來越覺得一罩,思路這東西腺占,如果沒有足夠清楚的思路以及保持這個思路前進與經(jīng)過思考的修正,花再多的時間都是白費挨措。
在作業(yè)中惭缰,困擾我的主要是start_url, start_resquest(), 這兩個的區(qū)別,本來是雖然不能區(qū)分晚缩,但是也理得清楚尾膊,后面越做就越理不清了,陷入死循環(huán)了
對于這兩點荞彼,因為時間的關(guān)系冈敛,沒有查詢,從剛才的調(diào)試中來談下吧鸣皂,從字面的意思上看抓谴,start_url是開始抓取的入口中,start_request()是一個函數(shù)寞缝,開始處理信息的入口齐邦,結(jié)合昨天的作業(yè)來看,這兩個分別適應(yīng)的情景第租,如果是一級頁面措拇,用start_url便可以了,而如果是有多層頁面慎宾,start_request()來定義抓取的url丐吓,然后再寫一個函數(shù)來爬取下一層的頁面浅悉。
還有一個問題沒有解決,就是提取被收錄的專題券犁,這個因為時間的原因术健,沒有理解清楚。
在作業(yè)中發(fā)現(xiàn)的不足
- 總是有這樣一個壞習(xí)慣粘衬,在做的過程中荞估,如果遇到不懂的,第一選擇往往是去谷歌稚新,主要谷歌的對象是別人的經(jīng)驗勘伺,看下別人有沒有類似的項目,然后快速掃一遍褂删,看似能夠比較快地解決問題飞醉,但是卻是很零碎地知識,不系統(tǒng)屯阀,前期還好缅帘,但是在后面,可以預(yù)見地是懶于思考难衰,會在一個個的問題上困擾更久钦无。
- 沒有很好地建立自己的知識索引系統(tǒng),有一些問題盖袭,之前也是遇到過了铃诬,但是找起來還是不夠快,這是物理上的索引苍凛,在大腦里的索引就是沒有很好地總結(jié)歸類趣席。