从 html 页面抓取内容
Scraping content from html page
我正在使用 nokogiri 抓取网页。该页面的结构由一个无序列表组成,其中包含多个列表项,每个列表项都有一个 link,一个图像和文本,都包含在一个 div 中。
我正在尝试找到一种干净的方法来提取每个列表项中的元素,这样我就可以将每个 li 包含在一个数组或散列中,如下所示:
li[0] = ['Acme co 1', 'image1.png', 'Customer 1 details']
li[1] = ['Acme co 2', 'image2.png', 'Customer 2 details']
目前我一次性获取所有元素,然后将它们存储在单独的数组中。有没有更好、更惯用的方法来做到这一点?
这是 atm 密码:
data = Nokogiri::HTML(html)
images = []
name = []
data.css('ul li img').each {|l| images << l}
data.css('ul li a').each {|a| names << a.text }
这是我工作的 html:
<ul class="customers">
<li>
<div>
<a href='#' class="company-name"> Acme co 1 </a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Cusomter 1 details
</div>
</div>
</li>
<li>
<div>
<a href='#' class="company-name"> Acme co 2</a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Customer 2 details
</div>
</div>
</li>
</ul>
谢谢
假设您拥有的代码可以满足您的需求,我不会尝试重写任何重要内容。通过将 #each
方法替换为 #map
:
,您可以更加简洁和惯用
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
这稍微简化了您的代码,但您的原始版本还不错。
例如,如果您要从页面上的多个区域抓取图像,我的简化可能无法一概而论!在这种情况下,恢复到原来的状态可能没问题。
我正在使用 nokogiri 抓取网页。该页面的结构由一个无序列表组成,其中包含多个列表项,每个列表项都有一个 link,一个图像和文本,都包含在一个 div 中。
我正在尝试找到一种干净的方法来提取每个列表项中的元素,这样我就可以将每个 li 包含在一个数组或散列中,如下所示:
li[0] = ['Acme co 1', 'image1.png', 'Customer 1 details']
li[1] = ['Acme co 2', 'image2.png', 'Customer 2 details']
目前我一次性获取所有元素,然后将它们存储在单独的数组中。有没有更好、更惯用的方法来做到这一点?
这是 atm 密码:
data = Nokogiri::HTML(html)
images = []
name = []
data.css('ul li img').each {|l| images << l}
data.css('ul li a').each {|a| names << a.text }
这是我工作的 html:
<ul class="customers">
<li>
<div>
<a href='#' class="company-name"> Acme co 1 </a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Cusomter 1 details
</div>
</div>
</li>
<li>
<div>
<a href='#' class="company-name"> Acme co 2</a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Customer 2 details
</div>
</div>
</li>
</ul>
谢谢
假设您拥有的代码可以满足您的需求,我不会尝试重写任何重要内容。通过将 #each
方法替换为 #map
:
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
这稍微简化了您的代码,但您的原始版本还不错。
例如,如果您要从页面上的多个区域抓取图像,我的简化可能无法一概而论!在这种情况下,恢复到原来的状态可能没问题。