Скребковый скрипт Python возвращает None - PullRequest
0 голосов
/ 05 июля 2019

я пытаюсь очистить данные от amazon, в частности, название продукта, но мой сценарий возвращает только None

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/Dell-Inspiron-5570-Touchscreen-Laptop/dp/B07FKRFTYW/ref=sxbs_sxwds-deals?keywords=laptops&pd_rd_i=B07FKRFTYW&pd_rd_r=38a464f1-5fc2-4e1e-91a3-c209f68e2b8c&pd_rd_w=IbLEX&pd_rd_wg=l5Ewu&pf_rd_p=8ea1b18a-72f9-4e02-9dad-007df8eca556&pf_rd_r=SWJJFWF3WM0ZQZGMN8XA&qid=1562328911&s=computers-intl-ship&smid=A19N59FKNWHX7C'

headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }


page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')

title = soup.find(id="productTitle")

print(title)

ожидаемые результаты должны быть в div, содержащем название продукта, но вместо None выводится

Ответы [ 3 ]

0 голосов
/ 05 июля 2019

Вы должны начать с установки lxml (если у вас его еще нет), вы можете сделать это, используя следующую команду pip:

pip install lxml

после установки замените это:

soup = BeautifulSoup(page.content, 'html.parser') 
title = soup.find(id="productTitle")

print(title)

с:

soup = BeautifulSoup(page.content, 'lxml')    
title = soup.find(id = "productTitle")

print(title.getText().strip())

надеюсь, это поможет

0 голосов
/ 06 июля 2019

Я не могу комментировать, но я хотел оставить записку о том, что сказал @Fozoro на случай, если кто-то в будущем столкнется с той же проблемой, что и я.Выполнение pip install lxml прошло успешно, однако, когда я пытался использовать его в качестве парсера для моего приложения, он все равно выдавал мне ошибки, связанные с тем, что я не нашел запрошенную функцию.однако выполнение: python3 -m pip install lxml позволило мне работать с анализатором lxml.

0 голосов
/ 05 июля 2019

Измените свой синтаксический анализатор:

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/Dell-Inspiron-5570-Touchscreen-Laptop/dp/B07FKRFTYW/ref=sxbs_sxwds-deals?keywords=laptops&pd_rd_i=B07FKRFTYW&pd_rd_r=38a464f1-5fc2-4e1e-91a3-c209f68e2b8c&pd_rd_w=IbLEX&pd_rd_wg=l5Ewu&pf_rd_p=8ea1b18a-72f9-4e02-9dad-007df8eca556&pf_rd_r=SWJJFWF3WM0ZQZGMN8XA&qid=1562328911&s=computers-intl-ship&smid=A19N59FKNWHX7C'

headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'lxml')
title = soup.find(id="productTitle")
print(title.text)

Вы также можете извлечь из content атрибут одного из метатегов

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/Dell-Inspiron-5570-Touchscreen-Laptop/dp/B07FKRFTYW/ref=sxbs_sxwds-deals?keywords=laptops&pd_rd_i=B07FKRFTYW&pd_rd_r=38a464f1-5fc2-4e1e-91a3-c209f68e2b8c&pd_rd_w=IbLEX&pd_rd_wg=l5Ewu&pf_rd_p=8ea1b18a-72f9-4e02-9dad-007df8eca556&pf_rd_r=SWJJFWF3WM0ZQZGMN8XA&qid=1562328911&s=computers-intl-ship&smid=A19N59FKNWHX7C'

headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.select_one('[name=description]')['content']
print(title)
...