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

import urllib 

import urllib2 

import random 

import requests

import os,sys 

import Queue

import threading

import time

import MySQLdb

from sgmllib import SGMLParser 

import re

queue = Queue.Queue()

out_queue = Queue.Queue()

num=0

class ThreadUrl(threading.Thread):

    

    def __init__(self, queue, out_queue):

        threading.Thread.__init__(self)

        self.queue = queue

        self.out_queue = out_queue

def run(self):

        while True:

            


host = self.queue.get()


print host


try:


html=requests.get(host)

result=html.content


html.close()


self.out_queue.put(result)

#place chunk into out queue


except:


print time.sleep(5)

#signals to queue job is done


self.queue.task_done()

class DatamineThread(threading.Thread):

   

    def __init__(self, out_queue):

        threading.Thread.__init__(self)

        self.out_queue = out_queue

def run(self):

        while True:

            


result = self.out_queue.get()


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


data0=re.findall(pattern,result)

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:

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


cursor=conn.cursor() 


cursor.execute(sql,values)


conn.commit()


except:


print "error2"

try:


cursor.close()


conn.close()


except:


print "error3"

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


data=re.findall(pattern,result)


for j in data:


print j


global num

      


try:


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


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


num=num+1


print num


f.write(temp.content)


except:


print "error4"


 

           


self.out_queue.task_done()

def main():

for k in range(1,2539):


print k

try:


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

html=requests.get(url)

result=html.content


html.close()


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 a in range(20):


w = ThreadUrl(queue, out_queue)


w.setDaemon(True)


w.start()


for i in dataresult:


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

queue.put(host)


for a in range(20):


dt = DatamineThread(out_queue)


dt.setDaemon(True)


dt.start()


except:


time.sleep(5)

queue.join()


out_queue.join()

#sql="select * from address"


#cursor.execute(sql)


#conn.commit()


#finalresult=cursor.fetchall()


#if finalresult:


#for x in finalresult:


#pass #print x[0:]

if  __name__=="__main__":

       main()

python多线程抓取网页信息的更多相关文章

  1. python 处理抓取网页乱码

    python 处理抓取网页乱码问题一招鲜   相信用python的人一定在抓取网页时,被编码问题弄晕过一阵 前几天写了一个测试网页的小脚本,并查找是否包含指定的信息. 在html = urllib2. ...

  2. PHP利用Curl实现多线程抓取网页和下载文件

    PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery ...

  3. HttpClient+Jsoup 抓取网页信息(网易贵金属为例)

    废话不多说直接讲讲今天要做的事. 利用HttpClient和Jsoup技术抓取网页信息.HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议. jsoup 是一款基于 Ja ...

  4. php curl_multi系列函数实现多线程抓取网页

    最近几天在做一个多搜索引擎关键字排名查询工具,用于及时方便的了解关键词在各大搜索引擎的排名. 在抓取360搜索的时候,发现360搜索每页只支持显示10个搜索结果,如果想获取100个搜索结果数据,就得搜 ...

  5. python 处理抓取网页乱码问题一招鲜

    FROM: http://my.oschina.net/012345678/blog/122355 相信用python的人一定在抓取网页时,被编码问题弄晕过一阵 前几天写了一个测试网页的小脚本,并查找 ...

  6. python 解决抓取网页中的中文显示乱码问题

    关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换.还包括一些如日文.韩文 .俄文.藏文之类的乱码处理,因为解决方式是一致的,故在此统一说明. 网络爬虫出现乱码的原因 源网页编码和爬取下来 ...

  7. .net抓取网页信息 - Jumony框架使用1

    往往在实际开发中,经常会用到一些如抓取网站信息之类的的操作,往往大家采用的是用一些正则的方式获取,但是有时候正则是很死板的,我们常常试想能不能使用jquery的选择器,获取符合自己要求的元素,然后进行 ...

  8. python分布式抓取网页

    呵呵,前两节好像和python没多大关系..这节完全是贴代码, 这是我第一次写python,很多地方比较乱,主要就看看逻辑流程吧. 对于编码格式确实搞得我头大..取下来页面不知道是什么编码,所以先找c ...

  9. python 多线程抓取动态数据

    利用多线程动态抓取数据,网上也有不少教程,但发现过于繁杂,就不能精简再精简?! 不多解释,直接上代码,基本上还是很好懂的. #!/usr/bin/env python # coding=utf-8 i ...

随机推荐

  1. setTimeout与setInterval方法的区别

    setTimeout与setInterval方法的区别 setTimeout()用于设定在指定的时间之后执行对应的函数或代码.,在全局作用域下执行 setTimeout(code,time[,args ...

  2. artDialog的几种基本使用

    1.confirm形式 var dialog=art.dialog({ lock:true, content: '请确认,您是否要删除选中的用吗?', icon: 'question', ok: fu ...

  3. winform textbox 的自动实现功能

    好久没写博客了,主要是太懒了,之前因为做bs的比较多现在想转cs端了,虽然现在做cs也一年了,可接触的东西太过零碎了,以至于感觉这一年好像什么都没有学到.估计是因为学了之后没有记录,不扎实,然后又忘记 ...

  4. NET站点Web部署

    NET站点Web部署(一键发布的实现) 在开发过程中经常需要发布到开发环境.测试环境或者预发布环境上给其他同事进行测试验证效果等等,每次发布都要备份,拷贝,修改配置文件等等重复操作非常的麻烦,效率大打 ...

  5. secure_file_priv 配置项对数据导入导出的影响

    secure_file_priv  mysqld 用这个配置项来完成对数据导入导出的限制. 例如我们可以通过 select * from tempdb.t into outfile '/home/my ...

  6. Using ROWNUM in Oracle

    ROWNUM is an Oracle pseudo column which numbers the rows in a result set. SELECT rownum, table_nameF ...

  7. QtCreator调试传入运行参数

    QtCreator是非常不错的IDE,最近在做的Qt命令行应用,因为调试的环境不同等问题,需要在调试的时候为 main() 传入参数.度娘了半天,没找到方法,只能自力更生.后来在“项目-构建和运行-运 ...

  8. 2013第46周四xml作为WS两端中间测试文件

    今天又到了11点多才开始写随笔记录,有点惭愧,加班回来到现在已经近2小时了,而我此刻才进入正题,之前的时间都跟MM聊天了,或许是单身久了,居然在个人情感方面感觉自己很out了,不想这些了,重点是回顾下 ...

  9. mybatis和ibatis区别

     ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis.  1.Mybat ...

  10. c++ 10

    一.二叉树 1.基本特征 1)树型结构的最简模型,每个节点最多有两个子节点--左子节点和右子节点. 2)单根性,每个子节点有且仅有一个父节点,整棵树有且仅有一个根节点. 3)递归性,以任何一个节点为根 ...