开始Python3抓取数据
暂时没有看廖雪峰的python3教程,而是直接看了这个👉笨办法学Python
笨办法学python - Learn Python The Hard Way 里面写的基本上是初级语法
看了一会儿发现这是针对无基础人士写的python2教程
看完之后就一个感觉:
python语法还是蛮简单的,但是swift还要简单一些
需求
终极目标是写一个python脚本,用于抓取热点微博,并定时转发
看了一下新浪微博api,为了完成该目标就需要
在深入的话还需要微博登录
step by step
api看不懂就看看demo
demo看不懂至少我看懂了post包里面需要什么数据
那么就直接开始尝试建立post或者get
还是不行,那么开始python抓取网页数据吧————这也是抓取热点微博的一个方法
简单抓取网页数据
注意使用的是python3版本
不要用错了人家老版本的了 必须的urllib库变了:
python 3.x中urllib库和urilib2库合并成了urllib库
其中urllib2.urlopen()变成了urllib.request.urlopen()
urllib2.Request()变成了urllib.request.Request()
参考了这两个网页Python3 urllib GET方式获取数据和python3.3 抓取网页数据
代码如下
我直接查询了一下我的微博的主页
本来写的是百度的,东西太多了看不过来。。。。。
网页的html数据就被储存在z_data当中,re库能够通过html的语法进行查询
第一个查询标题,第二个循环了查询链接
回显如下
更新2015-10-04 23:06:34
目的
是把网页中sidebar目录里的所有网页连接给装到一个 dic 字典当中
或者装到txt 文件当中,这样以后可以用脚本使用该 txt 文档
然后把文档里的所有东西都给拖下来
相当于是通过给出来的目录,下载整个网站
通过脚本可以吧.html
文档简单的变成 markdown 文档
操作
此次操作当中最重要的弄懂 python3 的正则表达式和目录操作
相关网页:
代码
1 | import urllib.request |
关键在于两个正则表达式:temp = 'href="(.+?)">'+names
links = re.compile('000">(.+?)</')
这两个的构造是通过网页源代码来的,我想找的代码段是(.+?)
里的内容
本来只用一个正则就行了的,但是整个网页当中有两段目录
于是 dic 显示一个名字names
对应了两个url
所以有了第二段 url 用于约束,也就是定位到 sidebar 当中
结果
看图
👆成功了哟👆
接下来的就是把/wiki/
开头的相对路径添加成为含有网址的绝对路径然后存为 txt 拿给其他的脚本使用了
更新:用pickle
储存,见下方更新
更新2015-10-06 20:00:10
添加成绝对路径
还是以廖雪峰的 python3 教程为例
我们在上面已经得到了这样的url 字符串:1
/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
这也是我们两行正则表达式的查找标准之一
在这里把url 改成绝对路径:1
urlname = "http://www.liaoxuefeng.com"+urlses.findall(data)[0]
存档以便以后使用
这里使用pickle
参考网页:Python3 pickle序列化
使用方法如下:
👇写入👇1
2with open("the_name_you_want.pickle","wb") as f:
pickle.dump(dic,f)
👇读出👇1
2with open('the_name_you_want.pickle','rb') as f:
dic=pickle.load(f)
这里的dic
是一个字典
用一个函数来生成 html 文档
输入一个{names:url}
储存的字典,效果是把储存的所有网页都下载下来
一下就写好了,代码如下:
1 | import urllib.request |
两个.py
怎么互相调用呢?
假如我有一个
b.py
1
2 def method():
print("hello world")
在a.py
里就该这样调用:
1
2
3
4
5 import b
blah
blah
blah
method()
也就是说,只用 import 就行了,因为在同一文件夹里,直接写import b
效果
看图:
看着文件一个一个生成还是蛮开心的
最后的错误是因为文件名中带有/
这个特殊的符号
我们可以通过替换names
字符串中的/
来解决
或者是用try
except
来忽略它
看看 finder:
至此就完成了查找目录-下载目录-下载网站的过程
以上