请教一个 python scrapy xpath 的问题。

2015-07-29 13:40:42 +08:00
 Mirachael

我想要抓取http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/
上面的数据。
我用scrapy shell http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/
测试的时候,取不到包含'下一页'的a标签。

进行测试,利用如下规则来选取:
In [35]: Selector(response).xpath('span[@class="nav_go_next"]/a')
然后,我发现一个大概的原因,就是nav_go_next标签的父元素里面包含了两个script脚本
我能通过
In [35]: Selector(response).xpath('//div[@class="page"]/script')
来取得script标签,但是通过
In [35]: Selector(response).xpath('//div[@class="page"]/span')
就取不到span元素。

有谁碰到过类似的问题吗?求教!谢谢!

3456 次点击
所在节点    Python
8 条回复
imn1
2015-07-29 13:51:01 +08:00
scrapy能运行js么?
这个span是js生成的,直接从html的dom是找不到的
Mirachael
2015-07-29 14:09:51 +08:00
@imn1 原来是这样,多谢!
knightdf
2015-07-29 14:26:50 +08:00
用phantomjs+ selenium来抓吧
lakewalker
2015-07-29 15:58:33 +08:00
页码都是page.js生成的。

有个办法,你可以先从response中把var countPage = 25这一句话用正则给匹配出来,取25这个数字,然后下一页你就直接去拼url,都是有规律的
第二页: http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/index_1.html
第三页: http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/index_2.html
...

以最大page count,搞个循环然后直接用拼出来的url进行yield_request操作,就可以不用phantomjs来抓了,phantom比较慢,不过对于只有25页来,还好。
ammzen
2015-07-29 18:26:29 +08:00
握爪,最近我也在爬这些东西
不知道你是用来做什么呢😁
Mirachael
2015-07-30 18:42:43 +08:00
@lakewalker 嗯,谢谢。我大概就是按照你的思路来做的,因为我发现25是个固定值,我直接循环加到start_urls里了。
Mirachael
2015-07-30 18:43:27 +08:00
@ammzen 我就是用python的scrapy爬虫框架来做的,比较快。
Mirachael
2015-07-30 18:50:33 +08:00
@knightdf 叼!长见识了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX