使用 PySpider 爬取没有特征的网站

2015-11-14 16:22:15 +08:00
 LeopardDennis

http://www.cers.edu.cn/cersii/instru.do?method=showInstru&instruId=1000100000003

使用 PySpider 爬取上述网址的仪器信息,因为元素没有特征, css 选择器选择不到,所以想用 PyQuery 尝试选择到对应元素,第一次接触 Python 和 PyQuery ,代码如下,请各位帮忙指点一二,感谢。

from pyspider.libs.base_handler import *
import re
from pyquery import PyQuery as pq
from lxml import etree
import urllib

class Handler(BaseHandler):
crawl_config = {
}

@every(minutes=24 * 60)
def on_start(self):
    self.crawl('http://www.cers.edu.cn/cersii/instru.do?method=listInstru', callback=self.index_page)

@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
    for each in response.doc('form a').items():
        if re.search("showInstru", each.attr.href, re.U):
            self.crawl(each.attr.href, callback=self.detail_page)

@config(priority=2)
def detail_page(self, response):
    return {
        "仪器名称": ,
    }
2366 次点击
所在节点    问与答
7 条回复
xierch
2015-11-14 16:27:29 +08:00
CSS selector 也有 :nth-child(),没有选不到的吧
binux
2015-11-15 16:35:00 +08:00
写一个循环,选取所有的 td ,然后根据颜色判断是 key 还是 value ,拼装起来
LeopardDennis
2015-11-15 17:07:25 +08:00
@binux 我尝试了循环, pyquery 的 each 方法总报错,因为用到了 lembda ,声明的方法告诉我找不到,能否指点一下。
binux
2015-11-15 17:28:25 +08:00
@LeopardDennis
for each in doc('td') # 这样得到的是 lxml 对象
或者 for each in doc('td').items() # 这样得到的依然是 pyquery 对象
LeopardDennis
2015-11-22 23:58:17 +08:00
@binux 您好,我在 demo.pyspider.org 上爬取了 8k+的数据,但是使用导出 csv 功能导出来的文件是空的,请问如何解决。项目地址: http://demo.pyspider.org/debug/eq_crawler
binux
2015-11-23 01:02:31 +08:00
@LeopardDennis 导出的地址后面加上 ?offet=0&limit=100
Izual
2016-03-08 23:24:51 +08:00
css selector 应该很好写啊, a[href^="略
另外还需要撸一个翻页的 callback 吧

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

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

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

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

© 2021 V2EX