zoukankan      html  css  js  c++  java
  • 用python写爬虫

    Python提供了许多Module,通过这些Module,可以很简单的做一些工作。比如,要获得cloga这个词在百度搜索结果页中的排名结果(排名结果+URL),这就是一个很简单的爬虫需求。

    首先,要通过urllib2这个Module获得对应的HTML源码。

    import urllib2
    url='http://www.baidu.com/s?wd=cloga'
    content=urllib2.urlopen(url).read()

    通过上面这三句就可以将URL的源码存在content变量中,其类型为字符型。

    接下来是要从这堆HTML源码中提取我们需要的内容。用Chrome查看一下对应的内容的代码(也可以用Firefox的Firebug)。

    可以看到url的信息存储在span标签中,要获取其中的信息可以用正则式。

    import re
    urls_pat=re.compile(r'<span class="g">(.*?)</span>')
    siteUrls=re.findall(results_pat,content)

    re.compile是将字符串编译为用于python正则式的模式,字符前的r表示是纯字符,这样就不需要对元字符进行两次转义。re.findall返回的是字符串中符合results_pat的列表,由于在results_pat中使用了子表达式,所以results存储的就是子表达式所匹配的内容,即<span>与</span>之间的内容。

    用正则式获得内容还需要进一步处理,因为其中包含html标签。类似,hi.baidu.com/<b>cloga</b> 2010-8-29或者<span> hi.baidu.com/<b>cloga</b> 2010-8-29 </span>,同样可以用正则式的sub方法替换掉这些标签。

    strip_tag_pat=re.compile(r'<.*?>')
    file=open('results000.csv','w')
    for i in results:
        i0=re.sub(strip_tag_pat,'',i)
        i0=i0.strip()
        i1=i0.split(' ')
        date=i1[-1]
        siteUrl=''.join(i1[:-1])
        rank+=1
        file.write(date+','+siteUrl+','+str(rank)+' ')

    file.close()

    完整代码如下:

    #!/usr/bin/python
    
    import urllib2
    url='http://www.baidu.com/s?wd=cloga'
    content=urllib2.urlopen(url).read()
    import re
    urls_pat=re.compile(r'<span class="g">(.*?)</span>')
    siteUrls=re.findall(urls_pat,content)
    strip_tag_pat=re.compile(r'<.*?>')
    file=open('results000.csv','w')
    rank=0
    for i in siteUrls:
      i0=re.sub(strip_tag_pat,'',i)
      i0=i0.strip()
      i1=i0.split()
      date=i1[-1]
      siteUrl=''.join(i1[:-1])
      rank+=1
      file.write(date+','+siteUrl+','+str(rank)+'
    ')
    file.close()
    

    再来就是把对应的结果输出到文件中,比如,排名、URL、收入日期这样的形式。OK,这样就用Python实现了一个简单的爬虫需求。秀一下上面代码的输出。
    2013-7-1,www.cloga.info/,1
    2013-6-19,www.zhihu.com/people/cloga,2
    2013-6-12,www.cloga.info/ga_javascript/,3
    2013-6-7,www.douban.com/people/cloga/,4
    2013-6-11,dict.youdao.com/eng/cloga/,5
    2013-6-1,cloga.com/,6
    2013-6-12,www.cloga.info/tag/web-metrics...,7
    2013-6-3,book.douban.com/people/47082939/coll...,8
    2013-6-19,space.chinaz.com/Cloga,9
    2013-4-24,website.informer.com/cloga.info,10
    



  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3170353.html
Copyright © 2011-2022 走看看