pyspider 调用PhantomJS 进行DOM 操作?
代码:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2017-09-28 01:03:55
from pyspider.libs.base_handler import *
import re
import random
import requests
class Handler(BaseHandler):
headers= {
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate, sdch",
"Accept-Language":"zh-CN,zh;q=0.8",
"Cache-Control":"max-age=0",
"Connection":"keep-alive",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
}
crawl_config = {
"timeout" : 20000,
"headers" : headers,
}
@every(minutes=24 * 60)
def on_start(self):
url = ['http://36.48.62.24:8704/DataQuery/doublePublicity/sgsBm/jilin_xzcf',
'http://36.48.62.24:8704/DataQuery/doublePublicity/sgsDq/jilin_xzcf'
]
for i in url:
self.crawl(i,callback=self.index_page,timeout = 200,fetch_type='js')
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('*').items():
if each.attr.href:
if re.findall(r'sjly',each.attr.href):
#url = 'http://cxcj.creditbj.gov.cn/%s'%each.attr.value1
self.crawl(each.attr.href, callback=self.index_page2,timeout = 200,fetch_type='js')
@config(age=10 * 24 * 60 * 60)
def index_page2(self, response):
for each in response.doc('*').items():
if each.attr.href:
if re.findall(r'sgsDataInfo/jilin_xzcf',each.attr.href):
self.crawl(each.attr.href, callback=self.detail_page,timeout = 200,fetch_type='js')
self.crawl('%s#more'%(response.url), callback=self.index_page2,timeout = 2000,fetch_type='js', js_script="""
function() {document.querySelectorAll("span > .f_black")[document.querySelectorAll("span > .f_black").length-2].click();}""")
@config(priority=5)
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('title').text(),
"text": response.doc('td').text(),
}
执行的是一个向下翻页的功能,测试的时候偶尔会生效,不知道是什么原因造成的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
找到问题了,执行一次是没有问题的,但是在重复执行的时候也都是从 第一页开始往下翻页的,所以永远只会在1页和2页之间循环。问题就出在这。
找到问题,但是目前并没有解决。
我知道可以通过 抓包post数据去实现,但是我想试着通过js去解决。
这个问题我有个解决方案,就是拿JS脚本 间隔一秒点一次,循环增加TIMEOUT的时间,在网址后面加#+str(i)这样进行去重,问题是爬任何网站翻页都是一个0.5N^2这个效率,我认为除非动用selenium翻页,用JS直接间隔翻页再爬的缺陷就在这里。pyspider只能爬取JS脚本执行完点击结束后的页面。