吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1434|回复: 4
收起左侧

[求助] python多线程数据抓不完整?

[复制链接]
double07 发表于 2021-5-29 13:09
请问用多线程为什么数据抓不完整?数据共有649条,实际只抓取了619条,问题在哪里?
[Python] 纯文本查看 复制代码
from concurrent.futures import ThreadPoolExecutor

def down_data(i):
    html = gethtml(i)
    llist = parse_url(html)
    for u in llist:
        try:
            html_detail = gethtml_detail(u)
            u = re.findall('https://susong-item.taobao.com/auction/\d{1,}.htm', html_detail, re.S)[0].strip()
            html_detail = gethtml_detail(u)
            parse = parse_url_detail(html_detail)
            df = pd.DataFrame(parse)
            for i in df.index:
                df['索引'].at[i] = i + 1
            df2 = cpca.transform(df['地址'])
            df['区'] = df2.loc[:, ['区']]
            df['地址'] = df2.loc[:, ['地址']]
            # result = pd.concat([df, df1], axis=0)
            df.to_excel("C:/Users/Administrator/Desktop/Python/AL-SF/1-retail" + st + ".xlsx", index=False)
            print('第%s条数据已保存' % str(i + 1))
        except Exception:
            try:
                html_detail = gethtml_detail(u)
                u = re.findall('https://zc-item.taobao.com/auction/\d{1,}.htm', html_detail, re.S)[0].strip()
                parse = parse_url_detail(u)
                df = pd.DataFrame(parse)
                for i in df.index:
                    df['索引'].at[i] = i + 1
                df2 = cpca.transform(df['地址'])
                df['区'] = df2.loc[:, ['区']]
                df['地址'] = df2.loc[:, ['地址']]
                # result = pd.concat([df, df1], axis=0)
                df.to_excel("C:/Users/Administrator/Desktop/Python/AL-SF/1-retail" + st + ".xlsx", index=False)
                print('第%s条数据已保存' % str(i + 1))
            except Exception:
                html_detail = gethtml_detail(u)
                parse = parse_url_detail(html_detail)
                df = pd.DataFrame(parse)
                for i in df.index:
                    df['索引'].at[i] = i + 1
                df2 = cpca.transform(df['地址'])
                df['区'] = df2.loc[:, ['区']]
                df['地址'] = df2.loc[:, ['地址']]
                # result = pd.concat([df, df1], axis=0)
                df.to_excel("C:/Users/Administrator/Desktop/Python/AL-SF/1-retail" + st + ".xlsx", index=False)
                print('第%s条数据已保存' % str(i + 1))


# 主程序
def main():
    global p
    page = next_page()
    time_start = time.time()
    with ThreadPoolExecutor(curPage) as t:
        for i in page:
            p += 1
            t.submit(down_data, i)
    time_end = time.time()
    print('第%s页数据已保存!====用时%.1f秒' % (p, time_end - time_start))

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

thepoy 发表于 2021-5-29 14:33
本帖最后由 thepoy 于 2021-5-29 14:34 编辑

submit 函数不是阻塞函数,会立刻返回。
你还需要用 wait 方法等待所有任务完成。
或者用 as_completed 监听完成的任务。
ReLoading 发表于 2021-5-29 14:34
#shutdown(True)  线程还没执行完成 主线程就退出了,加上这一句,等待任务执行完毕;
[Python] 纯文本查看 复制代码
# 主程序
def main():
    global p
    page = next_page()
    time_start = time.time()
    with ThreadPoolExecutor(curPage) as t:
        for i in page:
            p += 1
            t.submit(down_data, i)
        t.shutdown(True) #等待所有线程执行完毕
    time_end = time.time()
    print('第%s页数据已保存!====用时%.1f秒' % (p, time_end - time_start))

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
double07 + 1 + 1 热心回复!

查看全部评分

 楼主| double07 发表于 2021-5-30 15:58
ReLoading 发表于 2021-5-29 14:34
#shutdown(True)  线程还没执行完成 主线程就退出了,加上这一句,等待任务执行完毕;
[mw_shl_code=pytho ...

大佬 ,加了这句话,运行完结果就一句话 “第17页数据已保存!====用时0.0秒”
ReLoading 发表于 2021-5-30 16:23
double07 发表于 2021-5-30 15:58
大佬 ,加了这句话,运行完结果就一句话 “第17页数据已保存!====用时0.0秒”

你可能触发了 反扒机制,或者你的 down_data 函数有问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 03:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表