#!/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. 自动生成代码工具【JAVA版】

    发现任何项目无非五类操作:新增.修改.删除.查询详细.查询列表 大多数的服务端基础代码都是相同的,但是每次开发一个新项目都会做很多重复工作,从controller,bean,service,到数据库访 ...

  2. mysql中自动更新时间CURRENT_TIMESTAMP

    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP http://blog.163.com/qiongling007@126/b ...

  3. gridview动态生成列

    // 有连接的列 if (!String.IsNullOrWhiteSpace(filedModel.C_SqlDetail)) { HyperLinkField hyperColumn = new ...

  4. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  5. 开心学习系列学习笔记-----nodejs缺点

    不支持故障恢复   不知你是否在调试的过程中注意,当程序有错误发生时,整个进程就会结束,需要重  新在终端中启动服务器.这一点在开发中无可厚非,但在产品环境下就是严重的问题  了,因为一旦用户访问时触 ...

  6. XML Schema <第三篇>

    验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...

  7. SPRING+JNDI+C3P0 in tomcat6

    Tomcat 中Jndi是使用Tomcat自带的连接池,由于客户要求,抛弃Tomcat自带的连接池.使用c3p0 .经过几个小时调试,解决方案如下: 环境:Tomcat 6 下面来看Jndi 与 c3 ...

  8. android面试题之四

    十六.Android中Dalvik和JVM的区别是什么? 1. Dalvik基于寄存器,而JVM基于栈.基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短. 2. Dalvik负责 ...

  9. [Protractor] Running tests on multiple browsers

    Testing your AngularJS application on multiple browsers is important, and Protractor offers this abi ...

  10. Android日志系统驱动程序Logger源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6595744 我们知道,在Android系统中, ...