Я написал скрипт на python в сочетании с BeautifulSoup для извлечения названия книг, которые заполняются после предоставления некоторых номеров ISBN в окне поиска amazon.Я предоставляю эти номера ISBN из файла Excel с именем amazon.xlsx
.Когда я пытаюсь использовать следующий скрипт, он соответствующим образом анализирует заголовки и записывает обратно в файл Excel, как и предполагалось.
Ссылка, в которую я положил цифры isbn для заполнения результатов .
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
wb = load_workbook('amazon.xlsx')
ws = wb['content']
def get_info(num):
params = {
'url': 'search-alias=aps',
'field-keywords': num
}
res = requests.get("https://www.amazon.com/s/ref=nb_sb_noss?",params=params)
soup = BeautifulSoup(res.text,"lxml")
itemlink = soup.select_one("a.s-access-detail-page")
if itemlink:
get_data(itemlink['href'])
def get_data(link):
res = requests.get(link)
soup = BeautifulSoup(res.text,"lxml")
try:
itmtitle = soup.select_one("#productTitle").get_text(strip=True)
except AttributeError: itmtitle = "N\A"
print(itmtitle)
ws.cell(row=row, column=2).value = itmtitle
wb.save("amazon.xlsx")
if __name__ == '__main__':
for row in range(2, ws.max_row + 1):
if ws.cell(row=row,column=1).value==None:break
val = ws["A" + str(row)].value
get_info(val)
Однако, когда я пытаюсь сделать то же самое, используя multiprocessing
, я получаю следующую ошибку:
ws.cell(row=row, column=2).value = itmtitle
NameError: name 'row' is not defined
Для multiprocessing
чтоЯ внес изменения в мой скрипт:
from multiprocessing import Pool
if __name__ == '__main__':
isbnlist = []
for row in range(2, ws.max_row + 1):
if ws.cell(row=row,column=1).value==None:break
val = ws["A" + str(row)].value
isbnlist.append(val)
with Pool(10) as p:
p.map(get_info,isbnlist)
p.terminate()
p.join()
Мало того ISBN, с которым я пробовал:
9781584806844
9780917360664
9780134715308
9781285858265
9780986615108
9780393646399
9780134612966
9781285857589
9781453385982
9780134683461
Как я могу избавиться от этой ошибкии получить желаемые результаты, используя multiprocessing
?