四、Scrapy爬取伯乐在线并通过css解析文章字段

一、总体思路:

1、下载start_urls,交给parse方法处理,文章列表页start_urls = ['http://blog.jobbole.com/all-posts/']

2、parse处理,从中获取本页的文章url(以后获取到文章首图传递个自定义的parse_detail),和下一页的url

3、将下一页的url交给parse方法。继续进行1和2;将文章url传递给自定义的解析函数parse_detail

4、parse方法对下一页的url进行下载,自定义的parse_detial则通过css或者xpath 解析有用的信息传递给Item,次数两个操作是异步操作

二、进行两步操作:

1、从页面抓取所有的文章url交给解析器进行解析这个页面的标题时间点赞数等

2、从页面抓取下一个页面的url 进行下载

以上两部是异步进行的,什么叫异步。就是小明一边在吃冰棍,一边在看电视,懂了吗?


提取具体文章的href

>>> response.css("#archive .floated-thumb .post-thumb a::attr(href)").extract() ['http://blog.jobbole.com/111366/', 'http://blog.jobbole.com/111363/', 'http://blog.jobbole.com/111360/', 'http://blog.jobbole.com/111318/', 'http://blog.jobbole.com/108614/', 'http://blog.jobbole.com/111231/', 'http://blog.jobbole.com/111334/', 'http://blog.jobbole.com/111317/', 'http://blog.jobbole.com/111322/', 'http://blog.jobbole.com/111293/', 'http://blog.jobbole.com/111319/', 'http://blog.jobbole.com/111312/', 'http://blog.jobbole.com/102337/', 'http://blog.jobbole.com/111291/', 'http://blog.jobbole.com/111189/', 'http://blog.jobbole.com/111269/', 'http://blog.jobbole.com/111268/', 'http://blog.jobbole.com/111276/', 'http://blog.jobbole.com/111261/', 'http://blog.jobbole.com/111249/']

这样顺利的把列表页的href都提取出来啦!

tips:别忘了,在导入库上面要加入:from scrapy.http import Request# 从scrap上让Request工具帮忙进行下载

#从网页提取文章的URL,交给scrapy下载,并传递给parse_detail解析

#不是完整的地址,urljoin有两个参数,主域名自动拼接不完整的域名,并from urllib import parseyield 拼拼接过程:Request ( url=parse.urljoin ( response.url, post_url ), callback=self.parse_detail )

注意!!!拼接!别小看这个,很重要。好多网站都需要拼接,虽然jobbole用不到,以后用到的地方很多!!

提取下一页:

>>> response.css(".next.page-numbers ::attr(href)").extract()[0]

'http://blog.jobbole.com/all-posts/page/2/

注意,这个里面有两个标签,一个next和page-numbers,把两个合并起来,中间不要有空格,这个提取比较特殊。

三、写完了这也代码,有必要debug一下了。

# -*- coding: utf-8 -*-

importscrapy

importre

fromscrapy.httpimportRequest# 从scrap上让Request工具帮忙进行下载

fromurllibimportparse# 利用parse函数把url给join起来

classJobboleSpider(scrapy.Spider):

name ='jobbole'

allowed_domains = ['blog.jobbole.com']

start_urls = ['http://blog.jobbole.com/all-posts/']

defparse(self,response):

post_urls = response.css ('#archive .floated-thumb .post-thumb a ::attr(href)').extract ()# 从网页提取文章的URL,交给scrapy下载,并传递给parse_detail解析

forpost_urlinpost_urls:

yieldRequest (url=parse.urljoin ( response.url, post_url ),callback=self.parse_detail )

# callback回调进入datail周期进行循环

# yield是通过scrapy的Request()下载,并且交给自定义的parse_detail解析

#不是完整的地址,urljoin有两个参数,主域名自动拼接不完整的域名,并from urllib import parse

# 提取下一页并交给scrapy进行下载

next_url = response.css (".next.page-numbers::attr(href)").extract_first ("")

ifnext_url:

yieldRequest (url=parse.urljoin ( response.url, next_url ),callback=self.parse )

defparse_detail(self, response):

title= response.css (".entry-header h1::text").extract ()[0]

create_date=response.css("p.entry-meta-hide-on-mobile::text").extract()[0].strip()

praise_nums=response.css(".vote-post-up h10::text").extract()[0]

fav_nums=response.css(".bookmark-btn::text").extract()[0]

match_re = re.match (".*?(\d+).*", fav_nums )

ifmatch_re:

fav_nums=int(match_re.group (1))

else:

fav_nums=0

comment_nums=response.css("a[href='#article-comment'] span::text").extract()[0]

match_re = re.match(".*?(\d+).*", comment_nums)

ifmatch_re:

comment_nums=int(match_re.group (1))

else:

comment_nums=0

content=response.css ("div.entry").extract ()[0]

tag_list=response.css("p.entry-meta-hide-on-mobile a::text").extract()

tag_list = [elementforelementintag_listif notelement.strip ().endswith ("评论")]

tags=",".join ( tag_list )

pass


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 从现在开始 我有33个小时可以浪费 请叫我最富有的人
    天野丢阅读 179评论 2 0
  • 夜刻深荡 风还是那样四处流浪 可冷,可急,可伤 半边银径 走的还是那么悠扬 且慢,且雅,且境 孤处尘埃 悄然飘洒瑟...
    生于1937的年轻人阅读 145评论 0 0