作者NoneNaMey (NoneNamey)
看板Python
标题[问题] xpath的内容问题 求大大解答QQ
时间Tue Jul 7 13:42:47 2020
小弟最近在研究xpath,想说跟BeautifulSoup差不多,但是发现了一个问题
以这程式码为例子:
http://imgur.com/MmtRkj5
就是当我想要抓取一则回文的内容,原本预计会像这样回应
http://imgur.com/7s9VoNJ
但是当我加上text()的时候,他好像会自动抓取子节点做分段....
结果就变这样
http://imgur.com/YMEA0Wd
求解QQ...
我要如何让他不会自动分段
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.66.36 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1594100569.A.B25.html
※ 编辑: NoneNaMey (36.231.66.36 台湾), 07/07/2020 13:44:12
※ 编辑: NoneNaMey (36.231.66.36 台湾), 07/07/2020 13:44:35
※ 编辑: NoneNaMey (36.231.66.36 台湾), 07/07/2020 13:44:54
1F:→ alvinlin: 我觉得大家可能仰赖网路上的资讯了 07/07 23:49
2F:→ alvinlin: 从你的问题来看,我都看不出你现在打算用什麽 07/07 23:50
3F:→ alvinlin: BeautifulSoup里也有xpath的,但你的xpath是用什麽模组 07/07 23:52
4F:→ alvinlin: ? 07/07 23:52
5F:→ alvinlin: Parsel也有xpath也有css。先把你用了什麽,程式写了什麽 07/07 23:53
6F:→ alvinlin: 写清楚吧 07/07 23:53
7F:→ alvinlin: 我估了一下,你可能是用lxml 的 etree 07/07 23:55
8F:→ alvinlin: 但我懒得猜了 07/07 23:56
9F:→ TakiDog: etree很好用 你资讯贴详细一点吧 07/08 01:17
10F:→ NoneNaMey: 抱歉,我是用etree没错。因为想学scrapy 07/08 12:45
11F:→ NoneNaMey: 发现scrapy都是用xpath的语法,之前用bs4都是用find 07/08 12:47
12F:→ NoneNaMey: 这个问题就是我想抓 索引、发文时间以及内文 07/08 12:48
14F:→ NoneNaMey: 以这篇文为例子,总共只有15楼,我抓这行内码 07/08 13:06
17F:→ TakiDog: 你想要一个xpath抓一页全部楼层的回覆? 07/08 19:27
没错QQ 而且楼层都要对到
18F:→ alvinlin: 好吧。我大概懂了。但其实没错 07/08 20:12
19F:→ alvinlin: 它中间变空白是因为它有图及其他内容你没处理啊 07/08 20:15
21F:→ alvinlin: 参考这个吧 07/08 20:22
23F:→ alvinlin: 这要再筛选啦,不是用一个筛选器就搞定的。你要再回圈里 07/08 20:36
24F:→ alvinlin: 去判断 07/08 20:36
25F:→ alvinlin: 要再*在回圈里去判断其实状况 07/08 20:38
26F:→ alvinlin: 其*他状况 07/08 20:39
27F:→ alvinlin: 另外,我建议你用Parsel套件。虽然它们可能同样源自於lx 07/08 20:56
28F:→ alvinlin: ml套件。但scrapy官方说也可以用bs4只是「它比较慢」( 07/08 20:56
29F:→ alvinlin: 官方说的)。所以如果习惯bs4倒也不一定非用别的 07/08 20:56
30F:→ alvinlin: 看起来有三种。chain在一起就行了 07/09 00:45
33F:→ alvinlin: 看起来有三种。chain在一起就行了 07/09 00:47
34F:→ alvinlin: 看起来etree和parsel结果有点不同。 07/09 01:26
35F:→ alvinlin: 你那个应该是把空格strip掉就行了吧 07/09 01:26
我试过strip()和replace掉空白,只是最主要是PO文者有换行,他的list就多一个值,就对不到了
就像这篇
http://imgur.com/8owWR0I 他换了很多行,出来的结果就变这样
http://imgur.com/NrDMGSP
37F:→ NoneNaMey: 感谢大大细心的讲解~ 先把那个网站存到最爱XD 07/09 12:25
38F:→ NoneNaMey: 等等来研究看看 07/09 12:25
※ 编辑: NoneNaMey (36.231.93.193 台湾), 07/09/2020 12:45:37
※ 编辑: NoneNaMey (36.231.93.193 台湾), 07/09/2020 13:24:18
※ 编辑: NoneNaMey (36.231.93.193 台湾), 07/09/2020 13:48:43
※ 编辑: NoneNaMey (36.231.93.193 台湾), 07/09/2020 13:49:14
39F:推 Plot3D: Bs4也说能用lxml就用,快10倍 07/09 14:12
40F:→ NoneNaMey: 嗯啊,而且速度上真的比bs4快很多 07/09 14:19
41F:→ alvinlin: 我的是正常的。你用我的code吧。因为parsle是scrapy用的 07/09 15:26
42F:→ alvinlin: ,可以直接对应scrapy的selector小改即可。而且我觉得如 07/09 15:26
43F:→ alvinlin: 果你去看你那个网站回文的html结构,其实它真的是有三种 07/09 15:26
44F:→ alvinlin: 以上不同的结构。 07/09 15:26
46F:→ alvinlin: 它没有多很多行啦。就是中间1235楼的内文是空的。你拿我 07/09 15:31
47F:→ alvinlin: 程式去看每个内文就知怎麽回事了。 07/09 15:31
48F:→ alvinlin: Btw,bs4也可以用lxml 07/09 15:31
49F:→ alvinlin: 你的code可能看不出来哪一楼是因为你把它们全混在一起了 07/09 15:34
50F:→ alvinlin: 。你参考我的再去看文章的HTML就应该懂了。这里实在解释 07/09 15:34
51F:→ alvinlin: 不清楚。 07/09 15:34
52F:→ NoneNaMey: 感谢alvinlin大的讲解,我用你的方法是OK的。 07/09 15:46
53F:→ NoneNaMey: 结构上我也有发现不一样,因为发文者换行会多个<div> 07/09 15:47
54F:→ NoneNaMey: 我是卡在我抓c-article那行内码时会自动抓子结点分段, 07/09 15:48
55F:→ NoneNaMey: 导致他list会因此分段,解决办法就是用你用到的 07/09 15:48
56F:→ NoneNaMey: following-sibling 不过我还要了解一下XD 07/09 15:49
57F:→ NoneNaMey: 还有太多我不懂的用法了QQ 只能慢慢学了 07/09 15:50
58F:→ NoneNaMey: 会想用xpath是因为找工作如果会xpath比较不会被嫌(? 07/09 15:52
※ 编辑: NoneNaMey (36.231.93.193 台湾), 07/09/2020 15:54:58
59F:→ NoneNaMey: 我过去是用bs4+lxml解析器,不过速度真的慢xpath语法的 07/09 15:56
60F:→ NoneNaMey: 很多 07/09 15:56
61F:推 alvinlin: Ok.赞喔^^ 07/09 16:21