在抓取网页数据进行html分析的时候,以前一直使用HTMLParser,文档:http://docs.python.org/library/htmlparser.html
自从知道HTMLParser后,一直感觉他就是一个神器,分析简单快捷,几行代码搞定了。
这次在总页面抓取使用HTMLParser,没有问题,很快实现结果。但是在获取详细信息的页面时候,开始提示错误了:HTMLParseError: malformed start tag,各种google,其中有一大部分的结果是关于Beautiful Soup的,于是我了解了Beautiful Soup。HTMLParser还有一个缺点,对编码的处理也不是很友好。
开始安装的Beautiful Soup最新版本4.4.1,有问题,也是报这个错误。由于前面搜索知道换成版本3.07a就好了,直接又换了一个版本。先说官网地址:http://www.crummy.com/software/BeautifulSoup/,Beautiful Soup 3.07a下载地址:http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/。
测试通过,没有报错。能否抓取成功下面试试。正在看官方文档,版本3的文档不一样,贴地址:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html
时隔二分钟,测试成功。发现Beautiful Soup更加简单,文档也不错只看了开始的例子就会用了,速度应该不会太好,不过我只是满足自己需要。很好很强大。
刚刚结合文档总结了几个用法,很多根据文档写出文档没写的例子:
#基本的标签查找
asd = soup.find('div', id="productDescription")
#可以这样写
soup.findAll('td', {'class':"bucket normal"})[0]
#想要进行查询结果中查找
aaa = BeautifulSoup(str(asd))
#查找多个不同class,或
bbb = aaa.findAll('div', {'class':["leftImage","rightImage"]})
Read more...
Archive for web-2
通过IP获取用户经纬度
maxmind.com提供了一个服务,通过引入一个js文件(http://j.maxmind.com/app/geoip.js),可以把他判断到的用户的国家、城市、经纬度等信息加入到页面中来。
Read more...
其他功能函数
function geoip_country_code() { return 'CN'; }
function geoip_country_name() { return 'China'; }
function geoip_city() { return 'Shanghai'; }
function geoip_region() { return '23'; }
function geoip_region_name() { return 'Shanghai'; }
function geoip_latitude() { return '31.0050'; }
function geoip_longitude() { return '121.4086'; }
function geoip_postal_code() { return ''; }
function geoip_area_code() { return ''; }
function geoip_metro_code() { return ''; }
bae上添加django应用数据库配置
配置文件settings.py:
Read more...
if 'SERVER_SOFTWARE' in os.environ:
from bae.core import const
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'XXX',
'USER': const.MYSQL_USER,
'PASSWORD': const.MYSQL_PASS,
'HOST': const.MYSQL_HOST,
'PORT': const.MYSQL_PORT,
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'baidu',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}
这里是django应用数据库的配置,具体可以参考官网:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E4%BA%91%E7%8E%AF%E5%A2%83/WEB%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6
数据库需要先在本地导出来,然后用官网提供的phpmyadmin导入到bae数据库中。这里我只用到session表,直接执行sql语句简历一个django_session表就搞定了。
django中form简历隐藏input表单
今天做注册的验证码,里面有一个问题就是,建立一个隐藏input表单。我想用这个input存储验证码的验证信息,又不想太依赖javascript修改。接着我想伟大的django会有这个的,哈哈被我找到了,见官网:
https://docs.djangoproject.com/en/1.4/ref/forms/widgets/#hiddeninput
之所以放在froms.py中而不放在templates中,我想验证码的错误判断放在clean_验证码中,在forms中直接从request.POST中获取不会T_T,试了下没成功。
随着对django的了解,越发发现他的方便。看我写的代码
key = forms.CharField(widget=forms.HiddenInput(attrs={'value':''}))
Read more...
django的几个应用小技巧
早上在网上搜索到的,记录下,以后肯定会用到。
一、
LOGIN_URL的修改,在views里可能需要设置 限制登陆用户访问。用到@login_required,如果和登陆url不同需要设置login_url参数。但是在urls中我还没有找到好的方法,当我们用系统提供的views里的方法,像django.contrib.auth.views.password_change,这是修改LOGIN_URL就方便了,@login_required也不需要设置参数了,当然最好登陆url与默认的相同。
网上的方法,我还没有验证(像是老版本的用法),不过官网有介绍:
Read more...
import django.contrib.auth
django.contrib.auth.LOGIN_URL = '/login/'
官网链接:
https://docs.djangoproject.com/en/1.4/ref/settings/
二、
在urls里设置传给templates数据的方法,这个以前没有用过。
先记录:
( r'^reset_done/$' , 'django.views.generic.simple.direct_to_template' , { 'template' : 'message.html' , 'extra_context' : {
'msg' : _( u'我们已将一封包含恢复密码步骤的邮件发到了您的邮箱,请查收' ),
}}),
django发送重置密码链接邮件进行密码修改
第二次进行python用户注册登录等功能的编写,收获颇多,对django认识更多。
urls.py
Read more...
#passwd reset
url(r'^resetpassword/$','django.contrib.auth.views.password_reset',{'template_name':'account/resetpassword.html','email_template_name':'account/password_reset_mail.html','subject_template_name':'accouts/password_reset_subject.txt','post_reset_redirect':'/',}),
#密码重置链接
url(r'^reset/(?P[0-9A-Za-z]+)-(?P.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name' : 'account/password_reset.html','post_reset_redirect': '/account/logout/' }),
#passwd change
开始没有写密码重置链接的url配置,报错:
Exception Value: Caught NoReverseMatch while rendering: Reverse for'django.contrib.auth.views.password_reset_confirm' with arguments '()'and keyword arguments '{'uidb36': '4', 'token':'36x-7d6e7419555fda3bc140'}' not found.
参数的详细讲解:https://docs.djangoproject.com/en/1.4/topics/auth/
registration/password_reset_email.html可以直接复制django自带的那个文件,文件地址:
/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/registration/password_reset_email.html
小工具文档加密工具
方便自己手机记录,而且不需要导出到电脑保存,直接存到sae上了。主要记录自己的很多很突然的想法,用的sae的kvdb顺便参加了sae的活动,能拿1000个豆子。
文档的加密算法是自己写的,主要通过密码的长度和字符,密码又经过md5加密了。虽然没有达到自己预想的样子,
地址:http://0x55aatools.sinaapp.com/text/
还是用的django和twitter bootstrap ,写小工具很快。
python sae的KVDB不支持pkrget 按key前缀查找,只好自己遍历了所有文档进行后台文档的管理,url就是进行了简单的md5加密,这个写的时候应该加大难度。
Read more...
sae-python使用django1.4搭建网站
几个需要注意的地方,官网说的很清楚:
1、 config.yaml文件修改,
Read more...
name: py version: 1 libraries: - name: django version: "1.4" handlers: - url: /static static_dir: static2、index.wsgi文件修改,
import os
import django.core.handlers.wsgi
import sae
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
application = sae.create_wsgi_app(django.core.handlers.wsgi.WSGIHandler())
之后就打印了一个hello world!
用到的几个svn命令
svn checkout https://svn.sinaapp.com/newapp #此处需要认证,用户名/密码为您的SAE安全邮箱和安全密码
svn add 1/
svn commit -m"add wordpress"
web.py安装学习之hello world。
学习什么也离不开这个hello world,T_T,
1、下载webpy-webpy-webpy-0.36-63-gc7dcc24.tar.gz,解压,Python setup.py install。安装完毕
2、 编写a.py。内容如下:
Read more...
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
app.run()
3、运行,python a.py,访问http://127.0.0.1:8080/。上面写的0.0.0.0,有木有,难道是特意的。显示无法连接,当时差点晕了,(现在反应迟钝,经不起吓)。
在命令行的 code.py 后加参数 "IP 地址:端口" 来控制 web 服务器的监听范围
附上学习文档http://webpy.org/cookbook/
又要为微博写个应用,准备学习web.py
django还没出师,有想学web.py了。
有这么几个原因:
想把应用放到 sae,django版本太低,但是官方可以安装其他版本。现在在家,真心不愿意在windows下捣鼓了,太他妈多事了。
第二,django应用太多,太复杂。我只写一个简单微博应用,不需要那么完整复杂的功能。听说web.py很简洁,学习一下吧,也好见解一下各个的优势,像大牛自己写一个框架T_T。
第三,接触越多越好,以后说不定就用到了。
好吧,开始了。今天下午种花生,累屎鸟,反应迟钝了。
Read more...