当前位置:   article > 正文

个人知乎 ##基础九——爬虫入门PySpider_pyspider爬虫基础入门教程

pyspider爬虫基础入门教程

个人知乎

基础九——爬虫入门PySpider

爬虫基础框架

安装:pip install pyspider
scheduler:调度器,调度一个url处理
fetcher:下载网页器
processor:处理网页器,并解析出新的url
  • 1
  • 2
  • 3
  • 4
class Handler(BaseHandler):
    crawl_config = {
    }
    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl( 'http://scrapy.org/', callback=self.index_page)
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each  in response.doc( 'a[href^="http"]').items():
        self.crawl(each.attr.href, callback=self.detail_page)
    @config(priority=2)
    def detail_page(self, response):
        return {
        "url": response.url,
        "title": response.doc( 'title').text(),
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

Response/PyQuery

<参考资料: http://docs.pyspider.org/en/latest/apis/Response/>
< PyQuery:https://pythonhosted.org/pyquery/api.html >
< css选择器参考资料:http://www.w3school.com.cn/cssref/css_selectors.asp>

一个网页的框架
    doc
    url
    text
    header
    cookies
css选择器:标签解析
    自定义选中html标签
    .class:class='class'
    #id:id='id'
    div.inner:<div class='inner'>
    a[href^="http://"] :带http开头的a标签
    p>div>span:p标签下的div下的span,一层的
    p div:在内层即可,不要求父子
    [target=_blank]:Target=_blank
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
#例子
q=PyQuery(open('v2ex.html').read())
print q('title').text()
for each in q('div.inner>a').items():
#获取属性
    print 1,each.attr.href
#获取文本
    print 2,each.html()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Python和MySQL:MySQLdb

python的内嵌sql
  • 1
#连接数据库
db = MySQLdb.connect( 'localhost',  'root',  'nowcoder',  'wenda',
charset= 'utf8')
try:
#游标处理多条结果
    cursor = db.cursor()
    #插入
    sql =  'insert into question(title, content, user_id, created_date,
    comment_count) values ("%s","%s",%d, %s, %d)' % (
    'title',  'content', random.randint(1, 10),  'now()', 0);
    # print sql
    cursor.execute(sql)
    #最后新条目的id
    qid = cursor.lastrowid
    #所有事务需要提交到数据库
    db.commit()
    print qid
#异常处理
except Exception, e:
    print e
    #事物回滚
    db.rollback()
#断开连接
db.close()

#查取
db = MySQLdb.connect( 'localhost',  'root',  'nowcoder',  'wenda',
charset= 'utf8')
try:
    cursor = db.cursor()
    sql =  'select * from question order by id desc limit 2'
    cursor.execute(sql)
    #fetchall获取条目列表
    for each  in cursor.fetchall():
    #每个each都是一个属性列表
        for row  in each:
            print row
    #db.commit()
except Exception, e:
    print e
    db.rollback()
db.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

爬虫实践

#v2ex
#知乎
  • 1
  • 2
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号