#!/usr/env  python
#-*- coding: utf-8  -*-

import urllib

import urllib2

import random

import requests

import os,sys

import MySQLdb

from sgmllib import SGMLParser

import re

num=0

def main():

    try:

        conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='addressbookdb',charset="utf8")

        conn.query("set names utf8")

    except Exception,e:

        print e

        sys.exit()

    cursor=conn.cursor()

    for k in range(1,2574):

        url="http://apk.gfan.com/apps_7_1_"+str(k)+".html"

        html=requests.get(url)

        result=html.content

        pattern=re.compile('<a href="([http://apk.gfan.com]?/Product/App\d{1,8}.html)"')

        dataresult=re.findall(pattern,result)

        dataresult=list(set(dataresult))

        for i in dataresult:

            t="http://apk.gfan.com"+i

            print t

            html=requests.get(t)

            result=html.content

            pattern=re.compile('<div class="appdiscrib">[\s\S]*?<h4>(.+?)</h4>')

            data0=re.findall(pattern,result)

            print data0[0]

            pattern=re.compile('版 本 号(.+?)</li>')

            data1=re.findall(pattern,result)

            pattern=re.compile('开 发 者(.+?)</li>')

            data2=re.findall(pattern,result)

            pattern=re.compile('发布时间(.+?)</li>')

            data3=re.findall(pattern,result)

            pattern=re.compile('文件大小(.+?)</li>')

            data4=re.findall(pattern,result)

            pattern=re.compile('支持固件(.+?)</li>')

            data5=re.findall(pattern,result)

            pattern=re.compile('应用介绍</h3>[\s\S]*?<div class="intro">([\s\S]*?)</div>')

            data6=re.findall(pattern,result)

            for items in data6:

                pass#print re.sub('<br />',' ',items)

            sql="insert into address(name,version,developer,pubtime,filesize,support,introduction) values(%s,%s,%s,%s,%s,%s,%s)"

            for items in data6:

            

                if(data5):

                    values=(data0[0],data1[0],data2[0],data3[0],data4[0],data5[0],re.sub('<br />',' ',items))

                else:

                    values=(data0[0],data1[0],data2[0],data3[0],data4[0],'NULL',re.sub('<br />',' ',items))

                #print values

                #print sql % values

                try:

                    cursor.execute(sql,values)

                    conn.commit()

                except:

                    pass

            pattern=re.compile(' <div class="appTitle clearfix">[\s\S]*?<img src=(.+?)/>')

            data=re.findall(pattern,result)

            for j in data:

                print j

      #temp = urllib2.urlopen(i[10:])

        # 这个是保存函数,第一个参数是地址,第二个是保存的文件名,让地址的倒数8位,当做文件名

                #urllib.urlretrieve(j[1:-2], j[-40:])

                temp=requests.get(j[1:-2])

                global num

                f=file("picture/"+str(num),"w+")

                num=num+1

                print num

                f.write(temp.content)

                

    #sql="select * from address"

    #cursor.execute(sql)

    #conn.commit()

    #finalresult=cursor.fetchall()

    #if finalresult:

        #for x in finalresult:

            #pass #print x[0:]

    cursor.close()

    conn.close()

    f.close()

    

if  __name__=="__main__":

       main()

python crawler0723.py的更多相关文章

  1. python调用py中rar的路径问题。

    1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...

  2. python gettitle.py

    #!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...

  3. Python pydoc.py

    1. 查看帮助,我们可以在python命令行交互环境下用 help函数,比如: 查看 math 模块: >>> help('math')Help on built-in module ...

  4. django 1.7之后python manage.py syncdb没有了

    在命令行输入python manage.py createsuperuser按照提示输入即可记得先初始化表. django>1.7 python manage.py makemigrations ...

  5. Python安装mysql-python错误提示python setup.py egg_info

    做python项目,需要用到mysql,一般用python-mysql,安装时遇到错误提示如下: Command "python setup.py egg_info" failed ...

  6. python __init__.py用途

    转自http://www.cnpythoner.com/post/2.html Python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时, ...

  7. python setup.py uninstall

    I have installed a python package with python setup.py install How do I uninstall it? ============== ...

  8. python 运行python manege.py runserver时报错:“no module named djangorestframework” 的解决方案

    python 运行python manege.py runserver时报错:“no module named djangorestframework” 的解决方案 importerror:no mo ...

  9. Python Web.py

    安装Web.py root@bt:~# sudo pip install web.py Downloading/unpacking web.py Downloading web.py-0.37.tar ...

随机推荐

  1. 高斯消元 分析 && 模板 (转载)

    转载自:http://hi.baidu.com/czyuan_acm/item/dce4e6f8a8c45f13d7ff8cda czyuan 先上模板: /* 用于求整数解得方程组. */ #inc ...

  2. noi2002银河英雄传说(并查集)

    首先表示对C++读入读出问题复杂程度的敬畏,看了好多没讲明白的,本题用cin竟然过不了评测,搞scanf的读入搞了好久.... 本题确实是一道经典的并查集题型,不多讲,拿来练练手用的(其中经历很惨) ...

  3. UVa 12716 (GCD == XOR) GCD XOR

    题意: 问整数n以内,有多少对整数a.b满足(1≤b≤a)且gcd(a, b) = xor(a, b) 分析: gcd和xor看起来风马牛不相及的运算,居然有一个比较"神奇"的结论 ...

  4. UVa 1149 Bin Packing 【贪心】

    题意:给定n个物品的重量l[i],背包的容量为w,同时要求每个背包最多装两个物品,求至少要多少个背包才能装下所有的物品 和之前做的独木舟上的旅行一样,注意一下格式就好了 #include<ios ...

  5. HDU 5312 Sequence (规律题)

    题意: 一个序列的第n项为3*n*(n-1)+1,而 n>=1,现在给一个正整数m,问其最少由多少个序列中的数组成? 思路: 首先,序列第1项是1,所以任何数都能构成了.但是最少应该是多少?对式 ...

  6. 入门视频采集与处理(学会分析YUV数据)

    做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...

  7. 【转】自定义UITableViewCell控件阻挡回调不到didSelectRowAtIndexPath的解决办法

    原文网址:http://blog.talisk.cn/blog/2015/09/01/uitableview-didselectrowatindexpath-cannot-be-called-tips ...

  8. android之AlarmManager 全局定时器

    AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver ...

  9. Linux C程序如何检测WIFI无线USB网卡是否可用?

    最新做一个WIFI应用项目.如何检测WIFI USB设备是否插上了呢?特此共享. 第一种方法,采用读取文件的方式.在linux下,任何一种设备都可看成文件.通过分析相关文件信息,可得知WIFI设备是否 ...

  10. 查询MySQL锁等待的语句

    select 'Blocker' role,    p.id,    p.user,    left(p.host, locate(':', p.host) - 1) host,    tx.trx_ ...