Я создал скребок, использующий python в сочетании с Thread
, чтобы ускорить выполнение. Скребок должен анализировать все ссылки, доступные на веб-странице и заканчивающиеся разными алфавитами. Это все их разбирает.
Однако я хочу проанализировать все номера names
и phone
из этих отдельных ссылок, используя Thread
еще раз. Первая часть, которую мне удалось запустить, используя Thread
, но я не могу понять, как создать другую Thread
для выполнения последней части сценария?
Я мог бы обернуть их в один Thread
, но я хочу знать, как использовать два Threads
для выполнения двух функций.
Для первой части: я попробовал, как показано ниже, и это сработало
import requests
import threading
from lxml import html
main_url = "https://www.houzz.com/proListings/letter/{}"
def alphabetical_links(mainurl):
response = requests.get(link).text
tree = html.fromstring(response)
return [container.attrib['href'] for container in tree.cssselect(".proSitemapLink a")]
if __name__ == '__main__':
linklist = []
for link in [main_url.format(chr(page)) for page in range(97,123)]:
thread = threading.Thread(target=alphabetical_links, args=(link,))
thread.start()
linklist+=[thread]
for thread in linklist:
thread.join()
Мой вопрос: как я могу использовать функцию sub_links()
в другой Thread
import requests
import threading
from lxml import html
main_url = "https://www.houzz.com/proListings/letter/{}"
def alphabetical_links(mainurl):
response = requests.get(link).text
tree = html.fromstring(response)
return [container.attrib['href'] for container in tree.cssselect(".proSitemapLink a")]
def sub_links(process_links):
response = requests.get(process_links).text
root = html.fromstring(response)
for container in root.cssselect(".proListing"):
try:
name = container.cssselect("h2 a")[0].text
except Exception: name = ""
try:
phone = container.cssselect(".proListingPhone")[0].text
except Exception: phone = ""
print(name, phone)
if __name__ == '__main__':
linklist = []
for link in [main_url.format(chr(page)) for page in range(97,123)]:
thread = threading.Thread(target=alphabetical_links, args=(link,))
thread.start()
linklist+=[thread]
for thread in linklist:
thread.join()