写在前面:
第一篇博客,开始记录python学习实践之路。学习方法为先模仿,做出一个东西,再分析实现细节,即《程序员思维修炼》中说的R型学习法。沧海拾贝,一颗颗漂亮的石头终将堆积雄伟的python大山。
一、需求分析
抓取迅雷粉(http://xlfans.com/)上每日更新的迅雷会员账号密码,存入本地后直接复制粘贴,省去打开浏览器等一系列步骤
二、实现步骤
1.打开网站首页,获取最新发布页面的URL,其中采用requests类库发送请求,用pyquery分离元素,获取URL
2.获取源码之后,用正则表达式匹配账号密码,再做一些小修饰,输出到本地文件
三、几点说明
1.python版本为2.7,因为没能在3.4版本中成功下载pyquery库
2.这个网站采用了安全防护策略,所以有些时候并不能获取网页源码,我也在发送的请求中设置了user-agent,好像能管一些用,这个不是很清楚
3.字符编码有问题,但是稀里糊涂根据规则整好了
3.输出文件的路径设置成了“d:/result.txt”
四、源码及结果
import re
import sys
import requests
from pyquery import PyQuery as pq
reload(sys)
sys.setdefaultencoding('GBK')
fp = open("d:/result.txt",'w')
url = 'http://xlfans.com/'
headers = {
'Accept-Language': 'zh-cn',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/4.0 (compatible MSIE 6.00 Windows NT 5.1 SV1)',
}
r = requests.post(url, headers = headers)
#print r.text
html_content = pq(r.text)
#print r.encoding
#print r.text
content = pq( html_content('.focus').html())
disurl = content.attr('href')
r = requests.get(disurl,headers = headers)
#print r.text
#f = open('d:/html_content.txt','w')
#print >>f,r.text
result = ''
m = re.findall('(.*<br />)',str(r.text))
for i in range(len(m)):
if re.match('.*href',m[i]):
continue
#print >>fp,m[i][0:-6]
result += m[i][0:-6]
result += '\n'
print >>fp, result
print "Please see the result..."
五、后续工作
1.熟悉发送请求的首部信息
2.Python中的编码问题
3.继续研究requests和pyquery两个类库,是不是还有更好的方法抓取目标URL和信息呢?
4.复习正则表达式,练习python中正则表达式相关方法
六、尾
你将在接下来的博文中看到以上问题的解答或者总结