#python #xml #xpath #web-scraping
#python #xml #xpath #веб-очистка
Вопрос:
Я пытаюсь извлечь всего несколько символов с веб-сайта через lxml, в tree, затем xpath. Я пытался использовать Google Chrome для получения правильного xpath, но он печатает пустые скобки.
#imports
from lxml import html
import requests
#get magicseaweed Scripps report
msScrippsPage = requests.get("""http://magicseaweed.com/Scripps-Pier-
La-Jolla-Surf-Report/296/.html""")
#make tree from site
msScrippsTree = html.fromstring(msScrippsPage.content)
#get wave size
msScrippsWave = msScrippsTree.xpath("""/html/body/div[2]/div[5]/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[1]/div/div/div/div/div[1]/div/div[2]/ul[1]/li[1]/text()""")
print 'ms SCripps: ', msScrippsWave
Вывод на терминал ‘msScripps: [ ]’
Комментарии:
1. msScrippsPage содержит 404. Проверьте свой URL?
2. @Will Вы тоже скопировали тройные кавычки? Я не получаю 404, когда копирую / вставляю то, что я ввел выше, без тройных кавычек.
3. Ах. Мой теперь печатает: ms SCripps: [‘1-2’, ‘ ‘]
4. @Будет ли то, что вы изменили, чтобы появились 1-2?
5. На самом деле ничего. Ну, только строка с URL. Ваши тройные кавычки включают в себя символ новой строки.
Ответ №1:
Вы не должны использовать разрыв строки в своем URL. Когда вы используете одну строку, ваш xpath работает.
msScrippsPage = requests.get("""http://magicseaweed.com/Scripps-Pier-La-Jolla-Surf-Report/296/.html""")
print msScrippsPage.content
[' 0.4-0.6', ' ']
########################################
url = """http://magicseaweed.com/Scripps-Pier-
La-Jolla-Surf-Report/296/.html"""
print url
'http://magicseaweed.com/Scripps-Pier-n La-Jolla-Surf-Report/296/.html'
Редактировать: добавить полный пример
from lxml import html
import requests
msScrippsPage = requests.get("""http://magicseaweed.com/Scripps-Pier-La-Jolla-Surf-Report/296/.html""")
msScrippsTree = html.fromstring(msScrippsPage.content)
msScrippsWave = msScrippsTree.xpath("""/html/body/div[2]/div[5]/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[1]/div/div/div/div/div[1]/div/div[2]/ul[1]/li[1]/text()""")
print 'ms SCripps: ', msScrippsWave
Комментарии:
1. Теперь он выводит ‘ms Scripps: [<Элемент li в 0x1033b94c8>]
2. Я думаю, что вы забыли text() в конце вашего xpath. Не могли бы вы просто скопировать / вставить пример (я добавил к ответу)?
3. Если это хорошее решение, вы должны принять его, чтобы Александр получил оценку репутации 🙂