2015-05-06 1 views
1

Извините, если это было неопределенное название. Я пытаюсь очистить количество веб-комиксов XKCD на постоянной основе. Я видел, что http://xkcd.com/ всегда имеют свой новейший комикс на первой странице вместе с линией далее вниз сайта говоря:Как я могу надежно web-очистить в значительной степени непривязанную линию?

Permanent link to this comic: http://xkcd.com/1520/ 

Где 1520 это число новейшего комических на дисплее. Я хочу очистить это число, однако я не могу найти хороший способ сделать это. В настоящее время все мои попытки выглядят действительно хак как:

soup = BeautifulSoup(urllib.urlopen('http://xkcd.com/').read()) 
test = soup.find_all('div')[7].get_text().split()[20][-5:-1] 

Я имею в виду .. что технически работает, но если что-нибудь на сайте получает переехали в малейшей степени это может сломаться ужасно. Я знаю, что должен быть лучший способ просто найти http:xkcd.com/####/ в разделе первой страницы и просто вернуть ####, но я не могу найти его. Линия Permanent link to this comic: http://xkcd.com/1520/ просто кажется плавающей вокруг без каких-либо типов тегов, класса или идентификатора. Может ли кто-нибудь помочь?

ответ

1

Обычно я настаиваю на использовании парсеров HTML. Здесь, так как мы ищем конкретный текст в HTML (не проверяя никаких тегов), это довольно много хорошо применять поиск по регулярному выражению на:

Permanent link to this comic: http://xkcd.com/(\d+)/ 

экономия цифрах в группе.

Демо:

>>> import re 
>>> import requests 
>>> 
>>> 
>>> data = requests.get("http://xkcd.com/").content 
>>> pattern = re.compile(r'Permanent link to this comic: http://xkcd.com/(\d+)/') 
>>> print pattern.search(data).group(1) 
1520 
Смежные вопросы