Я изучаю, как использовать nokogiri, и немного вопросов прибыли ко мне на основе кода ниже
require 'rubygems'
require 'mechanize'
post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
puts "\nabsolute path with tbody gives nil"
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]').xpath('text()').to_s.strip.inspect
puts "\n.at_xpath gives an empty string"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").at_xpath('text()').to_s.strip.inspect
puts "\ntwo lines solution with .at_xpath gives an empty string"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].at_xpath('text()').to_s.strip.inspect
puts
puts "two lines working code"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].xpath('text()').to_s.strip
puts "\none line working code"
puts post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
puts "\nanother one line code"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").xpath('text()').to_s.strip
puts "\none line code with full path"
puts post_page.parser.xpath("/html/body/div/div/div/div/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
Проблема живет в / (? P
Часть вашей URL-конфигурации. Это позволяет только именно две цифры ( \ d {2}
) в то время как emain.pub_date.month
- только одна цифра.
Вы можете сделать, либо разрешать также одну цифру в URL-адресе (но это нарушит принцип уникальных URL, / 2010/1 / ...
будет таким же, как / 2010 / 01 / ...
) Или пройдите две цифры в аргумент месяца в вашем URL Templatetag.
Вы можете использовать дату
фильтр для достижения согласованного формирования объектов даты. Используйте тег URL, подобный этому:
{% url paper_issue_section_detail issue.pub_date|date:"Y",issue.pub_date|date:"m",issue.pub_date|date:"d",section_li.slug %}
Посмотрите на сайт месяца и дневного аргумента: он всегда будет отображаться в виде двух цифр (при необходимости). Посмотрите на документацию TEAT TAG , чтобы увидеть, какие варианты возможны для даты
фильтра.
//
означает каждый узел на каждом уровне, поэтому он намного дороже по сравнению с /
*
как заполнитель.
метода на узле at_xpath
. Я нашел, что вы часто используете текст ()
выражение. Это не требуется с использованием Nokogiri. Вы можете получить узел, затем вызовите текст
метода на узле. Это намного дешевле.
Также имейте в виду, Nokogiri поддерживает селекторов .css. Их может быть проще, если вы работаете с HTML-страницами.