Как мне добавить многопоточность? - PullRequest
0 голосов
/ 27 апреля 2020

Я не знаю, как веб-очистить так много, я написал этот код, но он работает очень медленно, этот код используется для получения результатов поиска по запросу Google chrome. Я хочу попытаться добавить многопоточность, но я не знаю как. Может кто-нибудь сказать мне, как многопоточность? Кроме того, какую функцию я должен многопоточности?

import urllib
import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool
# desktop user-agent

def get_listing(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
    html = None
    links = None

    r = requests.get(url, headers=headers, timeout=10)

    if r.status_code == 200:
        html = r.text
        soup = BeautifulSoup(html, 'lxml')
        listing_section = soup.select('#offers_table table > tbody > tr > td > h3 > a')
        links = [link['href'].strip() for link in listing_section]
    return links

def scrapeLinks(query_string):
    USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"

    query = query_string
    query = query.replace(' ', '+')
    URL = f"https://google.com/search?q={query}"

    headers = {"user-agent": USER_AGENT}
    resp = requests.get(URL, headers=headers)

    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")
        results = []
        for g in soup.find_all('div', class_='r'):
            anchors = g.find_all('a')
            if anchors:
                link = anchors[0]['href']
                title = g.find('h3').text
                item = {
                    "title": title,
                    "link": link
                }
                results.append(item)
        return results

def getFirst5Results(query_string):
    list = scrapeLinks(query_string)
    return [list[0]["link"], list[1]["link"], list[2]["link"], list[3]["link"], list[4]["link"]]

1 Ответ

0 голосов
/ 27 апреля 2020

Несколько вещей о многопоточности

  • Вы можете использовать его для кода, который требует сетевых вызовов. Например, вызов API.
  • Когда код будет выполняться в течение более длительного периода времени, и вы хотите запустить процесс в фоновом режиме.
  • В случае, если вы указали очистка веб-страниц - это длительная задача, так как она включает сетевой вызов Google API и анализ результатов после того, как мы вернем результаты. Предполагая, что вы используете функцию scrapeLinks для очистки. Вот некоторый код:

import threading t1 = threading.Thread(target = scrapeLinks, args = (query_string,) t1.start()

Чтобы получить результаты из потока, используйте: t1.join()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...