pyspider和pyquery总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyspider和pyquery总结相关的知识,希望对你有一定的参考价值。

1.参考

pyspider作者官网:

pyspider 爬虫教程(一):HTML 和 CSS 选择器

pyspider 爬虫教程(二):AJAX 和 HTTP

pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面

CssFullText - CSS选择器 说明

其他:

用pyspider写的爬虫几例

Python爬虫进阶四之PySpider的用法

Python爬虫利器六之PyQuery的用法

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
print     
for each in response_etree.cssselect(div li a):
    print each.get(href)  #推荐或返回None
    print each.text 
    print 123    
print 

 

(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]
print     
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中内容选择器常用方法汇总

pyspider中内容选择器常用方法汇总

我们的爬虫从pyspider开始说起

pyspider示例代码:解析JSON数据

pyspider爬虫框架

pyspider总结