Как насчет многопоточности / многопроцессорности в BeautifulSoup и Python 3? - PullRequest
0 голосов
/ 16 сентября 2018

Так что я возиться с BeautifulSoup .Я написал некоторый код и, с вашего разрешения, прошёл его здесь.Со следующим вопросом - есть ли способ использовать многопоточность или многопроцессорность, чтобы ускорить его?Держу пари, что этот код далек от идеала :) Следует ли использовать Pool для таких случаев?

ps.Я взял этот сайт в качестве примера.

Заранее спасибо.

import requests
from bs4 import BeautifulSoup
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

pages = [str(i) for i in range(100,2000)]
for page in pages:
    html = requests.get('https://statesassembly.gov.je/Pages/Members.aspxMemberID='+page).text
    def get_page_data():
    soup = BeautifulSoup(html, 'lxml')
    name = soup.find('h1').text
    title = soup.find(class_='gel-layout__item gel-2/3@m gel-1/1@s').find('h2').text
    data = {'name': name,
            'title': title,
            }

    return (data)

data = get_page_data()
with open('Members.csv','a') as output_file:
    writer = csv.writer(output_file, delimiter=';')
    writer.writerow((data['name'],
                    data['title'],
                    ))

1 Ответ

0 голосов
/ 18 сентября 2018

грубая сила правительственный веб-сайт может быть незаконным в некоторых странах.Пожалуйста, убедитесь, что вы читаете законы об авторских правах своей страны и страны, из которой вы получаете данные.

Прежде всего, пожалуйста, разделите ваш список на части, после чего сделайте из него потоки, чтобы параллельно выполнять их.

Программа на Python, иллюстрирующая концепцию потоков

import threading 
import os 

def task1(): 
    print("Task 1 assigned to thread: {}".format(threading.current_thread().name)) 
    print("ID of process running task 1: {}".format(os.getpid())) 

def task2(): 
    print("Task 2 assigned to thread: {}".format(threading.current_thread().name)) 
    print("ID of process running task 2: {}".format(os.getpid())) 

if __name__ == "__main__": 

    # print ID of current process 
    print("ID of process running main program: {}".format(os.getpid())) 

    # print name of main thread 
    print("Main thread name: {}".format(threading.main_thread().name)) 

    # creating threads 
    t1 = threading.Thread(target=task1, name='t1') 
    t2 = threading.Thread(target=task2, name='t2')   

    # starting threads 
    t1.start() 
    t2.start() 

    # wait until all threads finish 
    t1.join() 
    t2.join() 
...