@lcd1232

Как достать данные?

import lxml.html as html
import requests
import time
url = "http://www.world-art.ru/animation/manga.php?id="
folder = ""
counter = 501
info = {}
page = html.parse(url+str(counter)).getroot()
info["name"] = page.xpath("html/body/table/tbody/tr[1]/td/center/table[7]/tbody/tr/td/table/tbody/tr/td[5]/table[2]/tbody/tr/td[3]/font[1]/b")[0].text
info["year"] = page.xpath("html/body/table/tbody/tr[1]/td/center/table[7]/tbody/tr/td/table/tbody/tr/td[5]/table[2]/tbody/tr/td[3]/b/font[1]")[0].text
info["name1"] = page.xpath("html/body/table/tbody/tr[1]/td/center/table[7]/tbody/tr/td/table/tbody/tr/td[5]/table[2]/tbody/tr/td[3]")[0].text
print(info["name1"])
Собственно не достает ни один из элементов. Путь указан верно, т.к. пользовался FirePath'ом. А как достать по-другому не знаю.
Update
import lxml.html as html
import requests
import time
from lxml import etree
from lxml.html import HTMLParser
# url = "http://animanga.ru/default.aspx?a=book&id="
url = "http://www.world-art.ru/animation/manga.php?id="
folder = ""
counter = 520
info = {}
r = requests.get(url+str(counter))
if r.ok:
    page = etree.fromstring(r.text, parser=HTMLParser())

    name = page.xpath("//font/b")
    for element in name:
        if (element.text and element.text.find("манга")!=-1):
            string = element.text
            string = string[:string.find("(")-1]
            print(string)

    name_eng = page.xpath("//tr/td/text()")
    i = 1
    for element in name_eng:
        if (i==40):
            print(element)
        i += 1

    year = page.xpath("//font")
    for element in year:
        string = element.text
        if (string and string.isnumeric()):
            print(string)
Знаю, что код ужасен и, что name_eng он не получает, но хоть что-то.
  • Вопрос задан
  • 1504 просмотра
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
скачай файл на локальный и внимательно прочитай статью и видео, это изменит твой подход
prostoitblog.ru/xpath-i-css/kak-sostavlyat-xpath-i...

писать пути вида
html/body/table/tbody/tr[1]/td/center/table[7]/tbody/tr/td/table/tbody/tr/td[5]
очень плохой признак - одно изменение на странице/ в таблице, и вся нумерация идет лесом

учись составлять выражения по типу регекспов: строить путь, который совпадет на твоем участке
Ответ написан
baterson
@baterson
python/django
Используй Beautiful Soup, очень удобно парсить с его помощью
Вот гайд, даже если английского не знаешь, все понятно
https://www.youtube.com/watch?v=3xQTJi2tqgk
Ответ написан
angru
@angru
Никогда не приходилось парсить такие сайты, не завидую вам.
Как вам уже советовали откройте исходник странички, там немного другая струстура, например нет tbody.
Также корневой элемент это html, так что его не надо указывать в xpath.

У меня получился тот еще говнокод:

import lxml.html as html
import requests
from lxml import etree
from lxml.html import HTMLParser


info = {}
r = requests.get("http://www.world-art.ru/animation/manga.php?id=501")

if r.ok:
    tree = etree.fromstring(r.text, parser=HTMLParser())

    info["name"] = tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]/font[1]/b")[0].text
    info["year"] = tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]/font[2]")[0].text
    info["name1"] = str(etree.tostring(tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]")[0])).split('<br/>')[1]

    print(info)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы