Очистка Python с помощью xml выводит пустые скобки

#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. Если это хорошее решение, вы должны принять его, чтобы Александр получил оценку репутации 🙂