#!/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. windbg vmware win7联机调试环境搭建

    接下来设置虚拟机启动模式,可以直接设置现在的虚拟机启动项为debug模式 或者直接新建一个启动项目 bcdedit /dbgsettings {serial [baudrate:value][debu ...

  2. Front end workflow

    标签:请叫我红领巾 记一哈记一哈 ^_^ 推荐个不错的群 自己刚开始折腾的时候也是无处下手,渺茫啊.然而我是有一个很好的前端群(真的很棒,欢迎加入:[375042952]),关注群里的每一次讨论,每一 ...

  3. python文件_批量改名

    #! /usr/bin/env python #coding=gbk #文件操作实例--将文件夹下所有图片名称加上'_test' import re,os,time #str.split(path) ...

  4. [HDU] 3711 Binary Number [位运算]

    Binary Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  5. [转]学DSP、FPGA、ARM,哪个更有前途?

    1.这世界真是疯了,貌似有人连FPGA原理是什么都不知道就开始来学习FPGA了. 2.DSP就是一个指令比较独特的处理器.它虽然是通用处理器,但是实际上不怎么“通用”.技术很牛的人可以用DSP做一台电 ...

  6. pl/sql执行动态sql

    SQL> declare             msql varchar2(200);    begin    loop    msql := 'select * from bfw_test' ...

  7. margin:0 auto 与 text-align:center 的区别(转载)

    摘自:http://www.cnblogs.com/zhwl/p/3529473.html 基本概念: 1.text-align: 属性规定元素中的文本的水平对齐方式;   该属性通过指定行框与哪个点 ...

  8. Web UI 网站用户界面设计命名规范

    Web UI 网站用户界面设计命名规范 WEB UI设计命名规范,也就是网站用户界面设计(网页设计)命名规范. 这套规范并非单纯的CSS.html或JavaScript命名规范,它涉及了很多使用Pho ...

  9. Hdu1401-Solitaire(双向bfs)

    Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered ...

  10. HTTP请求&&响应

    在视频上截的图....俗话说好记性不如烂笔头,所以就保留下来 请求: 响应: 状态码: 请求头和响应头的解释: