Почему этот простой веб-скрипт Python 3 XPath не работает? - PullRequest
0 голосов
/ 13 июня 2018

Я читал здесь учебное пособие по утилизации: http://docs.python -guide.org / ru / latest / scenarios / scrape /

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

http://www.bvmjets.com/

Это на самом деле может быть очень плохим примером.Я пытался сделать это с более сложным сайтом, но решил немного ошарашить его, чтобы понять, что происходит.

Следуя инструкциям, я получил XPath для одного из изображений.

/html/body/div/div/table/tbody/tr[4]/td/p[1]/a/img

Весь сценарий выглядит так:

from lxml import html
import requests

page = requests.get('http://www.bvmjets.com/')
tree = html.fromstring(page.content)

images = tree.xpath('/html/body/div/div/table/tbody/tr[4]/td/p[1]/a/img')

print(images)

Но когда я запускаю это, dict пуст.Я просмотрел документы по XPath и попробовал различные изменения в xpath, но каждый раз ничего не получаю.

1 Ответ

0 голосов
/ 13 июня 2018

Не думаю, что могу ответить на ваш вопрос напрямую, но я заметил, что изображения на целевой странице иногда оборачиваются по-разному.Я сам не знаком с xpath и не смог заставить работать селектор чисел, несмотря на этот пост .Вот несколько примеров, чтобы попробовать:

tree.xpath('//html//body//div//div//table//tr//td//div//a//img[@src]')

или

tree.xpath('//table//tr//td//div//img[@src]') 

или

tree.xpath('//img[@src]') # 68 images

Ключ к этому медленно накапливается.Найдите все изображения, затем найдите изображение, завернутое в интересующий вас тег, и т. Д., И т. Д., Пока вы не будете уверены, что сможете найти только те изображения, которые вас интересуют.

Обратите внимание, что [@src] позволяетнам теперь получить доступ к источнику этого изображения.Используя этот пост , мы можем теперь загрузить любое / все изображение, которое мы хотим:

import shutil
from lxml import html
import requests

page = requests.get('http://www.bvmjets.com/')
tree = html.fromstring(page.content)
cool_images = tree.xpath('//a[@target=\'_blank\']//img[@src]')
source_url = page.url + cool_images[5].attrib['src']
path = 'cool_plane_image.jpg' # path on disk

r = requests.get(source_url, stream=True)
if r.status_code == 200:
    with open(path, 'wb') as f:
        r.raw.decode_content = True
        shutil.copyfileobj(r.raw, f) 

Я очень рекомендую посмотреть Beautiful Soup .Для меня это помогло моим любителям веб-царапин.Посмотрите на этот пост для соответствующей отправной точки.

Возможно, это не тот ответ, который вы ищете, но надеюсь, что это отправная точка / какой-то полезной для вас - лучше всегоудачи!

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