python使用多线程下载网页 结果下载到的内容相同。。
 import aiohttp
import asyncio
import time
import multiprocessing as mp
import requests
from bs4 import BeautifulSoup
import socket
import re
import pprint

header = 'http://osu.ppy.sh/'
middle = 'p/pp/?'
mode = 'm=3'  # 0=stanard 1=taiko 2=ctb 3=mania
url = header + middle + mode + '&'
page = [1, 3]  # 开始页数-结束页数
badRequest = {}  # pageNum:resCode
htmls={}
colls={}
#way store in mongoDB : collection: {"_id":"1", "Rank":"1","Player Name":"Jakads","Accuracy":"97.59%","Play Count":""
#"Performance":"17288pp"}

def getPages(pageNum):  #每1秒获取一个页面当做缓存

    global url
    #global badRequest
    #global htmls
    try:
        print('开始get网页,pageNum=',pageNum)
        res = requests.get(url=url + 'page=' +str(pageNum), timeout=10)
        print(url + 'page=' +str(pageNum))
        time.sleep(.1)
        # 如果res不等于200 重试3次
        count = 0
        #print(res.status_code)
        while (res.status_code != 200 and count <= 3):
            res.status_code = requests.get(url=url + 'page=' +str(pageNum), timeout=10)
            print('restart get')
            count += 1
            if (res.status_code == 200):
                return res.text
            else:
                return res.status_code
        if(res.status_code==200):
            writez(res.text)
            return res.text
        else:
            print( 'pageNum : ', pageNum, '返回码 : ', res.status_code)
            return res.status_code
    except Exception as e:
        print(e)
        return None

def findTags(html,startNum):
    soup = BeautifulSoup(html, features='lxml')
    tables = soup.findAll('table')
    # print(len(tables))

    for t in tables:
        sec = 0 #table顺序
        for tr in t.tbody.findAll('tr'):
            # print('sec:',sec)
            td_sec = 0  #table内顺序
            for td in tr.findAll('td'):
                text = td.get_text().strip()
                # print(len(text))
                if (td_sec == 0):
                    dict = {"rank": text}
                elif (td_sec == 1):
                    dict.update({"Player Name": text})
                elif (td_sec == 2):
                    dict.update({"Accuracy": text})
                elif (td_sec == 3):
                    dict.update({"Play Count": text})
                elif (td_sec == 4):
                    dict.update({"Performance": text})
                elif (td_sec == 5):
                    dict.update({"SS": text})
                elif (td_sec == 6):
                    dict.update({"S": text})
                elif (td_sec == 7):
                    dict.update({"A": text})
                td_sec += 1 #每一次遍历+1
            colls[str(startNum+sec)] = dict
            sec += 1 #每一个用户+1

def writez(msg):
    with open('tmp.txt','w',encoding='utf-8') as f:
        f.write(msg)

if __name__=='__main__':
    startTime = time.time()
    pool = mp.Pool()
    jobs=[pool.apply_async(getPages,args=(pageNum,))for pageNum in range(page[0],page[1]+1)]

    pool.close()
    pool.join()
    results=[f.get() for f in jobs]
    # for z in jobs:
    #     writez(str(z.get()))
    #print(len(results))
    startNum=1

    #print(results[2])
    for h in range(0,len(results)):
        findTags(results[h],startNum)
        startNum+=50
    pprint.pprint(colls)

    #print(htmls)
    print('花费时间 : ', time.time() - startTime, 's')
    print('ok')






1个回答

问题解决了 原因是原网站被重定向到新页面去了...坑啊!一直加载到错误的页面所以读取错了...

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多线程下载网页
1:自己写了一个socket抓取页面,有些网站抓回来的数据是压缩之后的,得通过自己去判断,然后解压。可是有一些网站下回来直接是源码,没有任何压缩的,不晓得为什么 同样是请求gziprnrn2:考虑之后选择用libcurl下载,发送在多线程下,好大一部分网站下回来是空的,response_code为0rnrn3:求推荐一些第三方的引擎,可以跨平台使用,主要是想实现一个完成的http 页面抓取,麻烦各位了
多线程下载网页问题
[code=C#]HttpWebResponse response = request.GetResponse() as HttpWebResponse;rn Stream responseStream = response.GetResponseStream();rn StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);[/code]rnrnresponse rnresponseStream rnreaderrn是否需要定义多个?
python 获取网页的内容
1.安装pip 我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip。   1 $ sudo apt install python-pip 安装成功,查看PIP版本:     1 $ pip -V 2.安装reques...
python使用requests+BeautifulSoup获取网页元素的内容
1.导入第三方库request和beautifulsoup4 2.之后 import requests from bs4 import BeautifulSoup 3.使用requests中的get/post方法 r = requests.get(url) 4.之后需要重新定义网页的编码,否则可能会出现乱码 equests和beautifulsoup模块都会自行评测原网页的编码格式...
reduce函数中可否使用多线程下载网页
想编写一个程序用到mapreduce框架,实现多线程下载网页 不知能否实现,rnrn我的理解是:一个key/value对调用一次reduce函数,对一个网页没有必要用多线程。这里传入的key就是urlrnrnrn初学者,求指点rnrn
RAWTOHEX相同参数内容得到不同的结果
最近在研究字符转换时发现一个奇怪的问题,不多说,直接上SQL:rnrnSQLrnrnselect lengthb(dscription1) Len,rnRAWTOHEX('叶') Ch2Hex,rnutl_raw.cast_to_varchar2(RAWTOHEX('叶')) Hex2Ch,rnRAWTOHEX(substr(dscription1,1,1)) Col2Hex,rnsubstr(dscription1,1,1) Col,rnutl_raw.cast_to_varchar2(RAWTOHEX(substr(dscription1,1,1))) Hex2Col,rnimdsc1 contentrnfrom mytable rnwhere keyid = 'H76571' rnrnResultrnrnLEN CH2HEX HEX2CH COL2HEX COL HEX2COL CONTENT rn60 D2B6 叶 53F6 叶 Sö 叶子 Ø12/Ø2 rnrnrn可以看到,同样都是"叶"字,只不过一个是我直接传入的,另一个是从数据中读出的,这有什么区别吗?rnrn我在java中也测试过了,D2B6应该是正确的16位字符,不知道为什么从字段中读出的内容会解析出那么一个奇怪的结果.rnrnPS:该字段是nvarchar的类型rnrn请各位DX帮忙解惑,多谢多谢!!
Python 分块多线程下载器
python 分块多线程下载器 将通过 HTTP 协议传输的文件进行分块,并用多线程下载,充分利用本地带宽。 * 只需要 python 2.7 , 不需要三方库。 * 每个线程对应一个 http 连接 * max_block_size 越大内存占用越大,影响数据能否尽早写入磁盘而不是停留在内存里。单个下载块太大会出 **MemoryError** * 经过测试:压缩文件,视频文件,音频文件没问题,
python多线程下载oss图片
亲测通过 import urllib2,os from HTMLParser import HTMLParser import urllib import oss2 import MySQLdb import socket from multiprocessing import Pool import traceback from multiprocessing.dummy impo
Python多线程下载管理
使用Python语言,并且提供多线程进行下载。
Python多线程下载表情包
本课程从基本的爬虫开始讲起。到如何使用多线程的方式爬表情包。课程内容丰富,容易上手,干货多多。
python提取网页表格内容
网页源码可以正常打印就是无法准确提取出网页上表格中的信息。部分源码如下:rn……rn 信息论 xin xi lun 基础理论与应用 傅祖芸编著 rn rnrnrn 11263015 rn 到期 11-07-15 rnrn TN911.2 /3 c.6 rnrn……rn 也许是因为复选框的缘故吧,用以下方法总是出错:rntrs=self.scores.findAll('tr')rn for i in trs[11:]:rn for j in i.findAll('td'):rn if (j.div.string):rn print j.div.string.replace(" ","").replace("\n",""),rn提示信息是'NoneType' object has no attribute 'string'rnrn百思不得其解,请高手多多指教!
使用连接池查询数据库并加载到网页
实战说明 本项目是一个Javaweb项目,主要用于练习使用连接池技术以及对数据库的基本操作。 为什么要使用连接池(jndi) 数据库连接池具有:优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销等作用,是我们做Javaweb项目必不可少的一项技能。 本项目使用了 1、使用Tomcat8.0 2、数据库使用MySQL 3、 项目结构: 流程 第一步:配置Tomcat...
多线程下载使用DB问题
最近在使用多线程下载多个文件,在下载过程当中有下载得快的也有下载的慢的。 最后却报错出了这个错误: android.database.sqlite.SQLiteException: database is locked 当然不是每次都出,偶尔会出。出于我想看看到底是为什么,在网上搜索了找到了原因: 可以在出处去看也知道是什么原因了。 http://blog.sina.com.cn/s/bl
使用winsock多线程下载
各位大虾:rn 好!!!rn 本人已完成使用winsock进行文件下载功能的编程.现急需完成多线程下载功能!rn 如何开辟5个线程?rn 线程的执行函数如何运行??(具体运行的函数)rn 需要利用API吗?
使用开源框架进行多线程下载
使用的开源框架,多线程下载, 好处,代码简单易懂 需要导入多线程下载的jia包 // 设置下载进度条 final ProgressDialog pd = new ProgressDialog( SplashActivity.this); // 设置下载进度条水平方向显示 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
使用RandomAccessFile实现多线程下载
使用写流来下载网上的资源,用多线程对资源进行下载。      第一步:创建两个java脚本,一个服务器,一个客户端 首先推出多线程下载的实现原理   第二步:服务器部分   继承  Thread              1、定义四个变量(线程id、文件下载的路径、文件保存的路径、单个线程下载的数据量) public int id;//线程id public U
使用URL和URLConnection(多线程下载)
使用URL和URLConnection(多线程下载)
使用python访问网页
python版本:3 访问页面: import urllib.request url=&quot;https://blog.csdn.net/qq_33160790&quot; req=urllib.request.Request(url) resp=urllib.request.urlopen(req) data=resp.read().decode('utf-8') print(data) ...
使用xutils实现多线程下载
这个开源项目在github可以下载到。 HttpUtils http = new HttpUtils(); /** * 2 进行下载  * url 下载的路径 * target 存放目标地址  * autoResume  是否支持断点续传下载  */ http.download(path, "/mnt/sdcard/feiq.exe", true, new RequestC
多线程下载RXdownload的使用
1.导入依赖 compile 'zlc.season:rxdownload:1.1.1' 2.Acticity的操作 private Subscription subscription; //设置最大线程 //设置下载失败重试次数 subscription = RxDownload.getInstance() .maxThread(3) //
使用多线程下载的问题~
1.DownLoadThreadrn[code="java"]import java.io.BufferedInputStream;rnimport java.io.File;rnimport java.io.InputStream;rnimport java.io.RandomAccessFile;rnimport java.net.HttpURLConnection;rnimport java.net.URL;rnrnpublic class DownLoadThread implements Runnable rn String url = "";rn File file = null;rn int startp;rn int endp;rn int i;rnrn public DownLoadThread(String url, int startp, int endp, File file, int i) rn this.url = url;rn this.file = file;rn this.startp = startp;rn this.endp = endp;rn this.i = i;rnrn rnrn public void run() rn try rn System.out.println("第"+i+"个线程");rn URL downUrl = new URL(url);rn HttpURLConnection connection = (HttpURLConnection) downUrlrn .openConnection();rn InputStream is = connection.getInputStream();rn BufferedInputStream bis = new BufferedInputStream(is);rnrn RandomAccessFile raf = new RandomAccessFile(file, "rw");rn byte buf[] = new byte[1024];rn int size = -1;rn int flag = 0;rn raf.seek(flag);rn //bis.skip(startp + 1);rn while ((size = bis.read(buf,0,1024)) > 0) rn if ((startp + size) >= endp) rn size = endp - startp;rn rn raf.write(buf, 0, size);rn startp = startp + size;rn flag+=size;rn rn bis.close();rn raf.close();rn connection.disconnect();rn catch (Exception e) rn e.printStackTrace();rn rnrn rn[/code]rn2.TestDownLoadrn[code="java"]public class TestDownLoad rnrn int i;rn rnrn public void multiThreadDown(String url, int bytecount, int threadnum,int filelength) rnrn while (i < threadnum) rn int startp = bytecount * i;rn int endp = bytecount * (i + 1);rn File f = new File("C:\\123.jpg");rn DownLoadThread Dt = new DownLoadThread(url, startp, endp, f, i);rn new Thread(Dt).start();rn i++;rn rnrn public static void main(String[] args) rnrn TestDownLoad TD = new TestDownLoad();rn String url= "http://hiphotos.baidu.com/myloveby2/pic/item/6e6b8bda7ed52e42d0164e8b.jpg";rn int bytecount = 0;rn int threadnum = 3;rn DownLoadRe dr = new DownLoadRe();rn int filelength = dr.getFileLength(url);rn if (filelength != -1) rn bytecount = (filelength / threadnum);rnrn rnrn TD.multiThreadDown(url,bytecount,threadnum,filelength);rn rnrn[/code]rnrnDownLoadRe dr = new DownLoadRe();rnint filelength = dr.getFileLength(url);这个是用来计算mp3的长度的。rn[size=medium]为什么下载的东西长度少很多,是拼接的问题吗?[/size]n[b]问题补充:[/b]n[code="java"]raf.seek(startp);rnrn while (startp < endp) rnrn size = bis.read(buf, 0, 1024);rn if (size == -1)rn break;rn raf.write(buf, 0, size);rn startp = startp + size;rnrn rn[/code]rnrn修改成这样吧,ok了
GreeDao 多线程下载 详解及使用
@转载自TMJJ99        http://blog.csdn.net/tthhvv/article/details/78607375
使用python抓取网站图片,下载到本地
使用python抓取网站图片,下载到本地 看代码 import os import random import urllib.request def imgs(url): try: rep = urllib.request.Request(url) res = urllib.request.urlopen(rep) html = res....
python写一个多线程下载程序
简介 程序实现了多线程下载,在不支持断点续传时下载程序会采用单线程下载,可以自定义最大线程个数,程序会尝试尽可能多的线程去下载文件,如果因为使用太多线程而造成一些问题,也就是单个线程错误率达到设置最大错误率,将会自行减少线程个数,下载过程也会记录出错区间,然后插入到任务列表等待重新尝试下载,采用序列化工具以便下次下载同一个文件时依然能继续下载。 程序逻辑 每个url下载由一个Downlo...
相同结果合并
[code=sql] create table ReceiverRecordrn (rn ID int identity(1,1) primary key not null,rn [Typeid] int rn ,[ReceiverNumber] int rn ,[UserId] int rn ,[ReceiverDateTime] datetimern ,TypeName nvarchar(100)rn ,EmpName nvarchar(100)rn ,BureauName nvarchar(100)rn )[/code]rn[img=https://img-bbs.csdn.net/upload/201407/28/1406540495_507532.jpg][/img]rn上面是查询出来的结果集,我想把typeid相同的 number相加合并。可以根据部门来查询。求告知。
Python多线程下载FaceScrub人脸数据库
参考修改自:http://blog.csdn.net/chenriwei2/article/details/44925923 在下载之前,请自行申请faceScrub的使用权:http://form.jotform.me/form/43268445913460 填写表格申请通过之后,官方会给你一个下载链接,里面是各种图片的url位置。需要使用里面的facescrub_actors.txt 和 f
多线程下载
JAVA实现的多线程下载软件
vc_多线程下载多线程下载
vc_多线程下载 vc_多线程下载 vc_多线程下载 vc_多线程下载 vc_多线程下载
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview