可以从网页抓取图片,将其转化为数字并保存到文件中吗?
我知道这几乎是不可能的(如果我确定100%不可能,我就不会问这个问题了)
我想获取所有的黎巴嫩彩票号码,我找到的唯一网站是这个、这个和这个。我联系了这些网站,问他们能不能提供一个Excel或CSV文件,一个没有回复,一个说你看到的就是全部,他们不提供文件,第三个给了我一个ods
文件,但里面有很多缺失的结果和错误的结果。
我只是想要这些结果用于个人项目,既然网站管理员不帮我,我要么得黑进他们的数据库(如果我是匿名用户,这应该比较简单),要么就得抓取图片,把它们转换成数字,然后保存到CSV文件里或者其他格式。
如果只是文本,我可以用beautifulsoup来处理,但抓取图片、把它们转换成数字并存储为CSV文件的行,这可能吗?
我最喜欢的编程语言是Python,但只要能完成这个任务,我接受任何语言。
3 个回答
首先,我建议你看看 HtmlAgilityPack,这个工具可以帮助你抓取网页上的图片。这里有一个 使用示例。之后,你可以使用 python-tesseract 这个工具,它是 tesseract-ocr(一个用C++写的库)的一个封装,用来进行光学字符识别。
这完全是可以做到的。在Python中,你可以使用scikit库(http://scikit-image.org/);通过这个库,你可以“读取”一张图片,并把它保存成一个数字矩阵。为了这个目的,最好把图片保存为“黑白”格式,这样你就会得到一个单一的矩阵,每个数字对应一个像素,数值范围从0到255,表示灰度。通过这个矩阵,你可以识别出数字的模式,并把它们保存为文本。虽然这工作量很大,但绝对是可以实现的。
Matlab也可以很容易地“读取”图片,并把它们转换成矩阵。
import requests
import lxml, lxml.html
r = requests.get('http://www.lldj.com/pastresult.php')
html = lxml.html.fromstring(r.text)
imgs = html.cssselect('img')
for x in imgs:
src = x.attrib['src']
if src.startswith('images/Balls'):
print src[-6:-4]
结果(2014年10月7日的抽奖结果1212):
04
19
30
32
38
42
34
对于其他页面,网址中有抽奖号码(1154),这样你就可以获取任何抽奖的结果。
import requests
import lxml, lxml.html
r = requests.get('http://www.lebanon-lotto.com/lebanese-loto-results/draw-number/1154.php')
html = lxml.html.fromstring(r.text)
imgs = html.cssselect('img')
for x in imgs:
src = x.attrib['src']
#print src
if 'lotto_balls_gray' in src:
print src[-6:-4]
结果:
01
03
12
14
16
32
30