pyspider爬虫类有三个函数:
- on_start()
- index_page()
- detail_page()
爬虫操作流程:
新建爬虫项目,输入链接,然后点击run得到index_page,点击play,调用detail_page()进一步解析。解析后的结果可以用Python语法来提取,也可以用CSS selector来提取HTML elements,推荐使用CSS selector。CSS selector内嵌在response.doc对象中,response.doc()返回pyquery对象response.doc('a[href^="http"]')
,pyspider提供了一个CSS selector helper的工具来很容易的生成一个selector pattern。
pyquery的用
pyquery是python的一个爬虫模块,response.doc()返回一个pyquery对象,可以用response.doc()调用pyquery的api。
- response.doc().items()
- response.doc().text()
html()和text()获取相应的HTML或文本块
from pyquery import PyQuery as pq
d = pq("<html><title>hello</title></html>")
d = pq(url='http://www.baidu.com')
p = pq("<head><title>hello</title></head>")
p('head').html() # 返回<title>hello</title>
p('head').text() # 返回hello
根据HTML标签来获取元素
d = pq('<div><p>test 1</p><p>test 2</p></div>')
d('p') # 返回[<p>,<p>]
print d('p') # 返回<p>test 1</p><p>test 2</p>
print d('p').html() # 返回test 1
当获取到的元素不只一个时,html()、text()方法只返回首个元素的相应内容块。eq(index)根据给定的索引号得到指定元素
print d('p').eq(1).html() # 返回test 2
pyQuery选择
<dl class="basicInfo-block basicInfo-left">
<dt class="basicInfo-item name">中文名称</dt>
<dd class="basicInfo-item value">北京市</dd>
```
这种class的选择方法:
```
eles= d(".basicInfo-block .basicInfo-item")
for e in elements:
element_doc = PyQuery(e)
if element_doc.attr("class") == "basicInfo-item name":
attr_name = element_doc.text()
elif element_doc.attr("class") == "basicInfo-item value":
id的选择方法用#id。