三、用Css来提取网页

scrapy提供了两种提取方法,Xpath和Css。

Xpath用起来觉得好麻烦,有点笨,我还是比较喜欢Css的提取方式。因为CSS定位语法比Xpath简洁,定位方式更灵活多样,可以使用#id来根据ID获取元素,以及使用.class来根据class获取元素.用XPath实现的话都不会那么简洁,反过来呢,XPath可以使用,来返回到DOM树的上层节点中。anyway先操练起来!

http://blog.jobbole.com/102337/


F12来打开网页源代码,也可以点击firefox旁边那个小蜜蜂🐝

我现在想提取“我想对所有新手程序员说些肺腑之言”

关键词:entry-header;    h1

我们现在用mac终端来测试一下提取结果,进入虚拟环境

输入:

scrapy shellhttp://blog.jobbole.com/102337/

1.提取title

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

'我想对所有新手程序员说些肺腑之言'

解释一下:

这个点.  表示 选择所有class包含container的节点

extract()提取出他的值

[0]

::text伪类选择器

这里要用py3,编码才是Unicode中文字,不然py2的话,还是utf8字符串的显示模式。

2.提取日期

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

'2017/05/27 ·'

3、提取点赞数

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

'3'

4、提取收藏数

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

' 7 收藏'

用正则表达式把7提取出来

进入python环境,测试一下正则表达式

是骡子是马拉出来溜溜,不行慢慢调试

importre

match_re=re.match(".*?(\d+).*"," 7 收藏")

ifmatch_re:

print(match_re.group(1))

yeah!7出来了

5、提取评论数

我用了比较笨的方法提取的:

>>> response.css(".btn-bluet-bigger::text").extract()

[' ', ' 赞', ' 7 收藏', ' 3 评论']

>>> response.css(".btn-bluet-bigger::text").extract()[3]

' 3 评论'

>>> response.css(".btn-bluet-bigger::text").extract()[3].strip()

'3 评论'

Bobby老师是这么做的,

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

走神中:

自己做个小练习:


把博士帽那个240声望值提取一下。

>>> response.css("#author-bio .author-bio-info-block a::text").extract()[2].strip()

'240'

哎,还是我的笨方法好用,先这样吧,以后慢慢优化吧

6.提取内容

>>> response.css ( ".entry" ).extract()[0]或者

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

都可以

7、提取tag标签

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

['开发', ' 3 评论 ', '程序员']

如何把3评论给扔掉呢?

用数组的方式在python里面简单写段代码来验证一下

tag_list= ['开发',' 3 评论 ','程序员']

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

tags =",".join (tag_list)

print(tag_list)



Xpath基本语法

举例元素标签为artical标签

一:

artical 选取所有artical元素的子节点

/artical 选取根元素artical

artical/a 选取所有属于artical的子元素a元素

//div    选取所有div 子元素,无论div在任何地方

artical//div  选取所有属于artical的div 元素,无论div元素在artical的任何位置

//@class 选取所有名为class 的属性的

二:谓语

/artical/div[1]   选取所有属于artical 子元素的第一个div元素

/artical/div[last()]  选取所有属于artical子元素的最后一个元素

/artical/div[last()-1] 选取所有属于artical子元素的倒数低2个元素

//div[@lang]   选取所有拥有属性为lang的元素

//div[@lang="eng"] 选取所有div下lang属性为eng的元素

三:

/div/* 选取所有属于div元素的所有子节点

//*    选取所有元素

//div[@*]   选取所有带属性的title元素

//div/a|//div/p   选取所有div元素的a和p 元素

//span | //ul   选取文档中所有span和ul 的元素

artical/div/pl|//span  选取所有div下的pl和文档中所有span

注意事项:

1) 按照审查元素的写法不一定正确,要按照网页源码的才行

因为不一样,网页源码才是你看到的

2) 浏览器有自带的复制xpath功能,firefox下载firebug插件

3) xpath有c的速度,所以按照[@class=""]准确性较高

CCS选择器语法

*                  选择所有节点

#container         选择id为container的节点

.container      选择所有class包含container的节点

li a            选取所有li 下所有a节点

ul + p          选取ul后面的第一个p元素

div#container > ul 选取id为container的div的第一个ul子元素

ul ~p             选取与ul相邻的所有p元素

a[title]        选取所有有title属性的a元素

a[href="http://jobbole.com"]  选取所有href属性为http://jobbole.com的a元素

a[href*="jobbole"]     选取所有href属性值中包含jobbole的a元素

a[href^="http"]    选取所有href属性值中以http开头的a元素

a[href$=".jpg"]    选取所有href属性值中以.jpg结尾的a元素

input[type=radio]:checked   选择选中的radio的元素

div:not(#container)  选取所有id为非container 的div属性

li:nth-child(3)      选取第三个li元素

li:nth-child(2n)      选取第偶数个li元素

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

推荐阅读更多精彩内容

  • 20170531 这几天重新拾起了爬虫,算起来有将近5个月不碰python爬虫了。 对照着网上的程序和自己以前写的...
    八神苍月阅读 13,948评论 3 44
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,630评论 1 92
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,588评论 4 46
  • 那片叶子落在你的脚边, 你会去拾起来吗? 那座白雪封顶山峰坐落在你眼前, 你会起身去攀登吗? 那个你日思夜想女孩儿...
    LovLe阅读 131评论 0 1
  • 刚刚过去的2016年,在写作上颗粒无收,年底填表的时候,心里难过极了。年底大家纷纷回顾自己这一年的时候,我只能...
    c61c65d3a41e阅读 138评论 0 1