pyspider和pyquery总结
1.参考
pyspider作者官网:
pyspider 爬虫教程(一):HTML 和 CSS 选择器
pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
其他:
2.jQuery 语法
jQuery 是一个 JavaScript 库。jQuery 极大地简化了 JavaScript 编程。
http://www.w3school.com.cn/jquery/jquery_syntax.asp
http://www.w3school.com.cn/jquery/jquery_selectors.asp
http://www.w3school.com.cn/jquery/jquery_ref_selectors.asp
语法 描述
$(this) 当前 HTML 元素
$("p") 所有 <p> 元素
$("p.intro") 所有 class="intro" 的 <p> 元素
$(".intro") 所有 class="intro" 的元素
$("#intro") id="intro" 的元素
$("ul li:first") 每个 <ul> 的第一个 <li> 元素
$("[href]") 选取所有带有 href 属性的元素。
$("[href='#']") 选取所有带有 href 值等于 "#" 的元素。
$("div#intro .head") id="intro" 的 <div> 元素中的所有 class="head" 的元素
jQuery CSS 选择器可用于改变 HTML 元素的 CSS 属性。!!!!!
$("p").css("background-color","red");
3.pyspider相关
(1) 全局配置,调试时每次修改代码记得更新itag,save,刷新页面再run
class Handler(BaseHandler):
crawl_config = {
'itag': 'v001',
'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
}
(2) response.save用于传递数据
file_name = 'xxx'
self.crawl(img.attr.src, callback=self.save_img, save={'file_name': file_name}) def save_img(self,response):
file_name = response.save['file_name'] #使用传入的数据
(3) 如果返回结果为多项的json,无法每一项返回一个条目。。。
# https://binux.blog/2015/01/pyspider-tutorial-level-2-ajax-and-more-http/
# 我测试返回的数据不是预期(我想每个电影为显示一行)
# 你想要在界面中显示为多行?这是不行的,results 页面永远只会每个 url 返回一个结果。如果这个结果是一个数组,那么就显示一个数组。
def json_parser(self, response):
return [{
"title": x['title'],
"rate": x['rate'],
"url": x['url']
} for x in response.json['subjects']]
(4) 操作pyspider的response.doc
xml_doc = '''
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book> <book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>''' from pyquery import PyQuery
response_doc = PyQuery(xml_doc) #response_doc即pyspider的response.doc for each in response_doc('book>title').items(): #括号内部使用CSS选择tag,.items()用来遍历
print each.attr.lang
print each.text()
print 123
(5) 操作pyspider的response.etree
html_doc = '''
<div>
<ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>''' import lxml.html
response_etree = lxml.html.fromstring(html_doc) #response_etree即pyspider的response.etree for each in response_etree.xpath('//ul/li/a'):
print each.xpath('./@href') #返回列表 [0]可能报错
print each.text
print 123
for each in response_etree.cssselect('div li a'):
print each.get('href') #推荐或返回None
print each.text
print 123
(6) 方便本地调试response.doc 和 response.etree
url = 'http://movie.douban.com/top250'
headers={'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
# response_doc = PyQuery(url,headers=headers) request = urllib2.Request(url,headers=headers)
f = urllib2.urlopen(request)
# Note: this returns a tree, not an element. Use``parse(...).getroot()`` to get the document root.
response_etree = lxml.html.parse(f).getroot() #.getroot() for each in response_etree.xpath('//a[contains(@href,"subject")]'):
print each.xpath('./@href')[0]
for each in response_etree.cssselect('a[href*="subject"]'):
print each.get('href')
print # pyspider源代码为doc=PyQuery(etree)
response_doc = PyQuery(response_etree) for each in response_doc('a[href*="subject"]').items():
print each.attr.href
pyspider和pyquery总结的更多相关文章
- pyspider用PyQuery解析页面数据
示例说明: 本示例主要是PyQuery解析返回的response页面数据.response.doc解析页面数据是pyspider的主要用法,应该熟练掌握基本使用方法.其他返回类型示例见后续文章. py ...
- 【转】CentOS 6.5安装pyspider过程记录
原文地址:http://blog.sina.com.cn/s/blog_48c95a190102wczx.html 1.根据pyspider官方推荐的安装方法,使用pip命令直接安装pyspider ...
- pyspider示例代码三:用PyQuery解析页面数据
本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉.pyspider示例代码官方网站是http://demo.pyspider.org/.上面的示例代码太多,无从下手.因此本人找出一些 ...
- pyspider 简单应用之快速问医生药品抓取(一)
网址:http://yp.120ask.com/search/-0-0--0-0-0-0.html from pyspider.libs.base_handler import * class Han ...
- python3.4+pyspider爬58同城(二)
之前使用python3.4+selenium实现了爬58同城的详细信息,这次用pyspider实现,网上搜了下,目前比较流行的爬虫框架就是pyspider和scrapy,但是scrapy不支持pyth ...
- scrapy跟pyspider的杂谈
最近有一个私人项目要搞,可能最近的博客都会变成爬虫跟数据分析类的了.既然是爬虫,第一反应想到的就是鼎鼎大名的scrapy了,其次想到的pyspider,最后想到的就是自己写. scrapy是封装了tw ...
- Python pyspider 安装与开发
PySpider 简介 PySpider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI.采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器.任务监视器, ...
- Python爬虫-pyspider框架的使用
pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优 ...
- pyspider 文档介绍
一 代码区结构 def on_start(self)是脚本的入口点.单击run仪表板上的按钮时将调用它. self.crawl(url, callback=self.index_page)*是这里最重 ...
随机推荐
- Nodejs的安装配置及如何在sublimetext2中运行js
Nodejs的安装配置及如何在sublimetext2中运行js听语音 | 浏览:4554 | 更新:2015-06-16 11:29 Nodejs的安装配置及如何在sublimetext2中运行js ...
- ovs之组网实验
介绍 本示例将创建两个OVS实例和两个主机,其中每个OVS上接入一个主机,OVS实例之间有链路连接,形成一个链状拓扑,如图.在OVS组网完成之后,再通过手动方式添加流表,实现网络通信,从而验证实验可行 ...
- es上的的Watcher示例
Watcher插件配置(创建预警任务) watcher目前是沒有界面配置的,需要通过Resfulapi调用创建.管理.更新预警任务 创建一个Watcher任务的流程是怎样的? 我们先来看下创建一个预警 ...
- CentOS7使用firewalld防火墙配置端口
安装启用firewalld防火墙 CentOS7默认的防火墙是firewalld 如果没有firewalld防火墙,可以执行yum install firewalld 命令进行安装 firewalld ...
- 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
一.需求讨论 1.请问如何解决延迟问题 1000台机器,每1分钟循环一次但是刚好第一次循环第一秒刚处理完了,结果还没等到第二分钟又出问题,你那必须等到第二次循环,假如我这个服务很重要必须实时知道,每次 ...
- Mybatis-批量执行
一.使用动态SQL 中的 Foreach 批量插入 1.MySQL // 实体类 public class MyUser { private Integer id; private String na ...
- NOI-OJ 1.13 ID:5 素数回文数的个数
整体思路 使用埃拉拖色尼算法提前计算出1000以内的素数表. 设计一个回文判断函数isHW(int n),难点在于数字回文的判断.一个简单的方法是将数字n使用sprintf输出在一个数组中,然后从数组 ...
- JavaScript 基本包装类型,包装对象
前言 javascript对象是一种复合值,它是属性或已命名值的集合.通过'.'符号来引用属性值.当属性值是一个函数时,称其为方法.通过o.m()来调用对象o中的方法.我们发现,字符串也同样具有属性和 ...
- HTML(八)HTML meta标签&base标签
HTML meta元素 标签(meta-information)用于提供页面有关的元数据,除了提供文档字符集.使用语言.作者等基本信息外,还涉及对关键词和网页等级的设定.通过设置不同的属性,元数据可以 ...
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.5 粘性热传导流体动力学方程组的数学结构
1. 粘性热传导流体动力学方程组可化为 $$\beex \bea \cfrac{\p \rho}{\p t}&+({\bf u}\cdot\n)\rho=-\rho \Div{\bf u}, ...