作業(yè)代碼
spider.py
# -*- coding: utf-8 -*-
import scrapy
from jianshu.items import JianshuItem
import sys
import re
reload(sys)
sys.setdefaultencoding("utf-8")
class WeekSpider(scrapy.Spider):
name = "weekhot"
#start_urls = [ 'http://www.reibang.com/trending/weekly?&page=1',]
def start_requests(self):
url = 'http://www.reibang.com/trending/weekly'
for i in range(1, 6):
url = url + '?&page=%s' %i
yield scrapy.Request(url, self.parse)
def parse(self, response):
total = response.xpath('//div[@class="content"]')
item = []
for alone in total:
item = JianshuItem()
item['author'] = alone.xpath('div[@class="author"]/div/a/text()').extract()
posts = alone.xpath('div[@class="author"]/div/span').extract()
item['post_date'] = re.findall('at="(.*?)"><', posts[0], re.S)
item['title'] = alone.xpath('a[@class="title"]/text()').extract()
meta = alone.xpath('div[@class="meta"]')
item['read_num'] = meta.xpath('a[@target="_blank"][1]/text()').extract()
item['comment_num'] = meta.xpath('a[@target="_blank"][2]/text()').extract()
item['like_num'] = meta.xpath('span/text()')[0].extract()
yield item
items.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è)總結(jié)
這次所爬取的內(nèi)容和昨天的一樣甸饱,不過這次使用了xpath
和scrapy
病线,在速度上彌補(bǔ)了昨天所不足的地方危队,在作業(yè)中肴沫,困擾比較久的是xpath的用法宙枷,第一次學(xué)xpath掉房,以為和beautifulsoup一樣,只要截取到一部分標(biāo)簽慰丛,就可以直接搜索這個標(biāo)簽下的任意子標(biāo)簽卓囚,就是這個想法誤導(dǎo)了好久,嘗試了一下诅病,發(fā)現(xiàn)xpath與beautifulsoup的原理不太一樣哪亿,xpath是部分解析,要哪一部分就提取哪一部分贤笆,而beautifulsoup是全部解析蝇棉,舉個例子,我們要去找一個地方芥永,這個地方是某某縣篡殷,用xpath的辦法就是,你必須先知道是哪個省埋涧,再是哪個市板辽,最后才到某某縣奇瘦,你不知道哪個市也就找不到這個縣了,而用beautifulsoup的辦法就是不管你要找哪個縣劲弦,我先把整個地圖給你掃一遍耳标,再告訴你這個縣的位置,即使你不知道哪個市邑跪,也知道這個縣在哪里麻捻,兩種方法的優(yōu)缺點(diǎn)在哪里呢?就我個人感覺呀袱,xpath上手稍微難點(diǎn)贸毕,要按層級找,但是由于是部分截取夜赵,所以快明棍,而beautifulsoup呢,上手簡單寇僧,但是全局搜索摊腋,速度慢。當(dāng)然還在于xpath是用C編寫的嘁傀,beautifulsoup是用python編寫的兴蒸。
還有一個坑就是終于找到了第一次學(xué)scrapy為什么不運(yùn)行的原因了,原因在于url的設(shè)置不對细办。
昨天的問題解決情況
坑二橙凳、關(guān)于寫入到csv文件中,在輸出的到csv文件中笑撞,并轉(zhuǎn)化成excel文件后岛啸,發(fā)現(xiàn)
read_num
和comment_num
這兩列無法排序,糾其原因茴肥,是無法選取其值坚踩,將他們復(fù)制下來到文本中,發(fā)現(xiàn)多了幾個引號:
這個問題的產(chǎn)生并不是在編碼上的問題瓤狐,而是在原網(wǎng)站上的標(biāo)簽內(nèi)容本身就是帶有" "
的瞬铸,所以輸出到csv文件里,會默認(rèn)成列表中的另一個列表础锐,所以無法在exel中顯示其值