关于站点URL分层级爬取提交百度收录

SIte:www.lesou365.com/

打开链接分别有若干板块,想要爬取这些链接不难;但是这些链接下面有大量的文章链接,并且涉及到翻页爬取,我想拿到也能捣鼓出来,但是效率大大折扣,作为一个pythoner怎么能放任低效率进行工作呢?

Demo Code

思路是:每获取到一个上层URL时则进入该URL爬取所有文章的URL保存为txt文档;直到这个上层URL下面的URL都爬取完毕后再继续爬取其他上层URL的下层文章链接。

关于站点URL分层级爬取提交百度收录

File Structure

——washUrl            # URL清洗作为一个动作
|——getUrl.py
——pushUrl            # 推送URL至百度作为一个动作
|——push.py
——config.py
——main.py

Ask For

  • 请求指点如何增加爬取效率,可以用上Thread多线程(emmm我还没理解懂多线程 -_-)
  • 请求指点py项目的结构体系应当如何构建才是规范(PS:上方结构树完全是凭感觉瞎造出来的)
  • 项目完成会考虑使用GUI封装可视化使用(PS:毕竟使用的人不懂编程),请推荐一种相对上手简单的GUI模块

虚心求学,悉听指教!感谢learnku以及所有默默付出的成员。

Jason990420
最佳答案

以下代码只是简单显示一下多线程的作法, 也使用 PySimpleGUI 作为使用者介面

import time
import threading
import PySimpleGUI as sg


def func(window):
    time.sleep(5)   # Load page here

layout = [
    [sg.Button("New"), sg.Button('Exit')],
    [sg.Text('', size=40, key='STATUS')],
]

window = sg.Window("Multithread", layout, finalize=True, enable_close_attempted_event=True)

threads = []
while True:

    event, values = window.read(timeout=100)

    if event in (sg.WINDOW_CLOSE_ATTEMPTED_EVENT, 'Exit'):
        for thread in threads:
            thread.join()
        break
    elif event == 'New':
        thread = threading.Thread(target=func, args=(window, ), daemon=True)
        threads.append(thread)
        thread.start()
    elif event == sg.TIMEOUT_EVENT:
        window['STATUS'].update(f'No. of threads: {threading.active_count()}')

window.close()

PySimpleGUI 請參考 PySimpleGUI 简介

2周前 评论
讨论数量: 1
Jason990420

以下代码只是简单显示一下多线程的作法, 也使用 PySimpleGUI 作为使用者介面

import time
import threading
import PySimpleGUI as sg


def func(window):
    time.sleep(5)   # Load page here

layout = [
    [sg.Button("New"), sg.Button('Exit')],
    [sg.Text('', size=40, key='STATUS')],
]

window = sg.Window("Multithread", layout, finalize=True, enable_close_attempted_event=True)

threads = []
while True:

    event, values = window.read(timeout=100)

    if event in (sg.WINDOW_CLOSE_ATTEMPTED_EVENT, 'Exit'):
        for thread in threads:
            thread.join()
        break
    elif event == 'New':
        thread = threading.Thread(target=func, args=(window, ), daemon=True)
        threads.append(thread)
        thread.start()
    elif event == sg.TIMEOUT_EVENT:
        window['STATUS'].update(f'No. of threads: {threading.active_count()}')

window.close()

PySimpleGUI 請參考 PySimpleGUI 简介

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!