Mar*_*son 401 html html-parsing html-content-extraction web-scraping
我正在考虑使用Beautiful Soup,一个用于HTML抓取的Python包.我应该看看还有其他HTML抓包吗?Python不是必需的,我实际上也有兴趣了解其他语言.
到目前为止的故事:
Jon*_*way 43
在.NET世界中,我推荐HTML Agility Pack.不像上面的一些选项(如HTMLSQL)那么简单,但它非常灵活.它可以让你设计形式不佳的HTML,好像它是格式良好的XML,所以你可以使用XPATH或只是迭代节点.
http://www.codeplex.com/htmlagilitypack
Cri*_*ian 36
BeautifulSoup是HTML抓取的好方法.我以前的工作让我做了很多刮,我希望当我开始时我知道BeautifulSoup.它就像DOM有更多有用的选项,而且更加pythonic.如果你想尝试Ruby,他们移植了BeautifulSoup,称之为RubyfulSoup,但它有一段时间没有更新.
其他有用的工具是HTMLParser或sgmllib.SGMLParser,它们是标准Python库的一部分.这些工作通过每次进入/退出标签并遇到html文本时调用方法.如果你熟悉它们,他们就像Expat.如果要解析非常大的文件并且创建DOM树会很长且很昂贵,这些库特别有用.
正则表达式不是很必要.BeautifulSoup处理正则表达式,所以如果你需要它们的力量,你可以在那里使用它.除非你需要速度和更小的内存占用,否则我说要使用BeautifulSoup.如果您在Python上找到更好的HTML解析器,请告诉我.
dea*_*mer 20
我发现HTMLSQL是一种非常简单的screenscrape方式.使用它需要几分钟才能得到结果.
查询非常直观 - 如:
SELECT title from img WHERE $class == 'userpic'
Run Code Online (Sandbox Code Playgroud)
现在有一些其他替代方法采用相同的方法.
我知道并喜欢Screen-Scraper.
Screen-Scraper是一种从网站中提取数据的工具.Screen-Scraper自动化:
* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)
Run Code Online (Sandbox Code Playgroud)
常用用途:
* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data
Run Code Online (Sandbox Code Playgroud)
技术:
* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers
Run Code Online (Sandbox Code Playgroud)
三版屏幕刮刀:
* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
Run Code Online (Sandbox Code Playgroud)
使用Shoes和Hpricot, Scraping Stack Overflow特别容易.
require 'hpricot'
Shoes.app :title => "Ask Stack Overflow", :width => 370 do
SO_URL = "http://stackoverflow.com"
stack do
stack do
caption "What is your question?"
flow do
@lookup = edit_line "stackoverflow", :width => "-115px"
button "Ask", :width => "90px" do
download SO_URL + "/search?s=" + @lookup.text do |s|
doc = Hpricot(s.response.body)
@rez.clear()
(doc/:a).each do |l|
href = l["href"]
if href.to_s =~ /\/questions\/[0-9]+/ then
@rez.append do
para(link(l.inner_text) { visit(SO_URL + href) })
end
end
end
@rez.show()
end
end
end
end
stack :margin => 25 do
background white, :radius => 20
@rez = stack do
end
end
@rez.hide()
end
end
Run Code Online (Sandbox Code Playgroud)
我在 Ruby 上使用 Hpricot。例如,这是一段代码,我用来从我的 HireThings 帐户的六页中检索所有书名(因为它们似乎没有提供包含此信息的单个页面):
pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
pagerange.each do |page|
resp, data = http.get "/perth_dotnet?page=#{page}"
if resp.class == Net::HTTPOK
(Hpricot(data)/"h3 a").each { |a| puts a.innerText }
end
end
end
Run Code Online (Sandbox Code Playgroud)
它非常完整。在此之前的所有内容都是库导入和我的代理设置。
虽然它是为.NET web 测试而设计的,但我一直在使用WatiN框架来实现这个目的。由于它是基于 DOM 的,因此很容易捕获 HTML、文本或图像。最近,我用它将MediaWiki All Pages 命名空间查询中的链接列表转储到 Excel 电子表格中。下面的VB.NET代码片段相当粗糙,但它有效。
Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)
Dim PagesLink As Link
For Each PagesLink In PagesIE.TableBodies(2).Links
With MyWorkSheet
.Cells(XLRowCounterInt, 1) = PagesLink.Text
.Cells(XLRowCounterInt, 2) = PagesLink.Url
End With
XLRowCounterInt = XLRowCounterInt + 1
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
176626 次 |
| 最近记录: |