Python爬虫练习第二章【对一个不是…
2017-01-17 11:09
225 查看
通过这次练习,让我明白了哪儿不足,好多语法用的不熟练导致
比如 for i in range 很常用,在一个文本中循环调用每行指令的话
我的思路是创建一个函数 然后用for i in range循环调用
如
我之前使用Queue函库,不使用到多线程,所以比较鸡肋。
于是放弃了用Queue
还有就是 read(),readlines() 的使用
read()是按照原格式直接阅读,readlines()是以字符串形式全部阅读
对于要循环调用都是用的第二个,【而且!!!一定要记得strip(‘\n’)】就是删除换行,不然循环读取的时候回出现后缀加上了\n
从而无法得到正确的值。
关于正则匹配,我在调试的时候发现有些url可以正确匹配有的不可以,原来是网站在编写的时候源码上由于程序员的性格,导致有着不能匹配,可以在下面在加上一个匹配规则
正所谓练剑千日,得心应手,通过这次练习我发现我应该多敲敲代码多多练习。
因为网站太大了,所以这次抓取我分了两个步骤,第一步是将模块的所有页面的网址爬行到本地。
比如 这个模块有300页,每页有20篇内容,我最后所需要的就是内容的地址
通过逐次爬行内容网址,获取图片原始地址,再下载下来。
贴上第一部分源代码
#coding=utf-8
import re
import requests
import Queue
import time
import os
for i in range(1,454):
headeraa={'User-Agent':'Mozilla/5.0 (Windows NT
6.3; WOW64) AppleWebKit/537.1 (KHTML, like Gecko)
Chrome/21.0.1180.92 Safari/537.1 LBBROWSER'}
url='https://www.pu960.com/htm/piclist6/%d.htm'%i
ye =
requests.get(url=url,headers=headeraa)
yem = re.findall('
# print yem
for ioio in yem:
ioio1 = str(("https://www.pu960.com"+ioio))
print "当前提取的当前页面为:" + ioio1
ft = open('mulu.txt','a+')
try:
ft.write(ioio1+'\n')
except:
log.error('write backup error')
ft.close()
通过翻页可以知道不同页面是/目录/1.htm
2.htm 以此类推
所以用for
a93d
i in range(1,300),循环300次
将第一个网址贴上去,用%d 匹配 当前次数
最后将结果保存下来
第二部分就是逐次抓取图片了,关于这部分我首先是想用Queue库,后来发现没这必要,还是用for i in
range
将第一部分抓取的地址以整体的形式阅读,然后逐次载入,在这里同时执行创建下载的函数。
贴上第二部分第一次想法源代码
# coding=utf-8
import requests
import re
import time
import Queue
import threading
q = Queue.Queue()
threading_num = 5 #线程数
f = open("mulu.txt", "r")
while True:
line =
f.readline()
if
line:
pass
c = "%s"%line
print c
else:
break
f.close()
q.put(c)
def start():
while not
q.empty():
cc = q.get()
try:
headeraa={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64)
AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92
Safari/537.1 LBBROWSER'}
url = "%s"�
print url
a = requests.get(url=url,headers=headeraa)
b = re.findall('
',a.content)
print "提取当前页面的原始地址,请稍等..."
time.sleep(6)
print "提取成功,正在写出目录~"
time.sleep(6)
print b
print "写出成功,正在下载图片~"
i=0
for ios in b:
asa = requests.get(url=ios,headers=headeraa)
print "开始下载:" + ios
file = open(str(i)+'.jpg','wb')
比如 for i in range 很常用,在一个文本中循环调用每行指令的话
我的思路是创建一个函数 然后用for i in range循环调用
如
我之前使用Queue函库,不使用到多线程,所以比较鸡肋。
于是放弃了用Queue
还有就是 read(),readlines() 的使用
read()是按照原格式直接阅读,readlines()是以字符串形式全部阅读
对于要循环调用都是用的第二个,【而且!!!一定要记得strip(‘\n’)】就是删除换行,不然循环读取的时候回出现后缀加上了\n
从而无法得到正确的值。
关于正则匹配,我在调试的时候发现有些url可以正确匹配有的不可以,原来是网站在编写的时候源码上由于程序员的性格,导致有着不能匹配,可以在下面在加上一个匹配规则
正所谓练剑千日,得心应手,通过这次练习我发现我应该多敲敲代码多多练习。
因为网站太大了,所以这次抓取我分了两个步骤,第一步是将模块的所有页面的网址爬行到本地。
比如 这个模块有300页,每页有20篇内容,我最后所需要的就是内容的地址
通过逐次爬行内容网址,获取图片原始地址,再下载下来。
贴上第一部分源代码
#coding=utf-8
import re
import requests
import Queue
import time
import os
for i in range(1,454):
headeraa={'User-Agent':'Mozilla/5.0 (Windows NT
6.3; WOW64) AppleWebKit/537.1 (KHTML, like Gecko)
Chrome/21.0.1180.92 Safari/537.1 LBBROWSER'}
url='https://www.pu960.com/htm/piclist6/%d.htm'%i
ye =
requests.get(url=url,headers=headeraa)
yem = re.findall('
# print yem
for ioio in yem:
ioio1 = str(("https://www.pu960.com"+ioio))
print "当前提取的当前页面为:" + ioio1
ft = open('mulu.txt','a+')
try:
ft.write(ioio1+'\n')
except:
log.error('write backup error')
ft.close()
通过翻页可以知道不同页面是/目录/1.htm
2.htm 以此类推
所以用for
a93d
i in range(1,300),循环300次
将第一个网址贴上去,用%d 匹配 当前次数
最后将结果保存下来
第二部分就是逐次抓取图片了,关于这部分我首先是想用Queue库,后来发现没这必要,还是用for i in
range
将第一部分抓取的地址以整体的形式阅读,然后逐次载入,在这里同时执行创建下载的函数。
贴上第二部分第一次想法源代码
# coding=utf-8
import requests
import re
import time
import Queue
import threading
q = Queue.Queue()
threading_num = 5 #线程数
f = open("mulu.txt", "r")
while True:
line =
f.readline()
if
line:
pass
c = "%s"%line
print c
else:
break
f.close()
q.put(c)
def start():
while not
q.empty():
cc = q.get()
try:
headeraa={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64)
AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92
Safari/537.1 LBBROWSER'}
url = "%s"�
print url
a = requests.get(url=url,headers=headeraa)
b = re.findall('
',a.content)
print "提取当前页面的原始地址,请稍等..."
time.sleep(6)
print "提取成功,正在写出目录~"
time.sleep(6)
print b
print "写出成功,正在下载图片~"
i=0
for ios in b:
asa = requests.get(url=ios,headers=headeraa)
print "开始下载:" + ios
file = open(str(i)+'.jpg','wb')
相关文章推荐
- 最近看了一段时间Python,练习写了一个抓取淘女郎的爬虫,话不多说,上代码
- 看到别人的Python爬虫博客,自己也模仿着写一个,顺便练习一下python
- Getting Started Spidering a Site使用Chilkat(python)练习的一个爬虫(from :http://www.example-code.com)
- [Python]网络爬虫(六):一个简单的百度贴吧的小爬虫
- 用python实现一个抓取电影的爬虫
- [python脚本]一个简单的web爬虫(1)
- Python 最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。 实现方式: 通过goog
- 《Python核心编程》第二版第36页第二章练习 续三 -Python核心编程答案-自己做的-
- Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)
- 毕业设计中怎样用python写一个搜索引擎的分布式爬虫---异样的美感
- 正则表达式:网页爬虫:从TXT中获取邮箱地址(获取的练习,缺点:一行只能匹配一个)
- 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
- 毕业设计中怎样用python写一个搜索引擎的分布式爬虫---异样的美感
- 依次读取文件中的一个字符 分类: python基础学习 python 小练习 2013-08-22 11:14 289人阅读 评论(0) 收藏
- python 爬虫scrapy框架练习
- 用python实现一个抓取腾讯电影的爬虫
- 《Python核心编程》第二版第36页第二章练习 续二 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第36页第二章练习 续一 -Python核心编程答案-自己做的-
- listview练习,当连接类型为文本时图片地址的文本框隐藏,textbox渲染到客户端的ID不是服务端所写的clientID,只能另外添加一个属性myid
- Erlang练习:洗牌算法——将一个序列打乱,类似于Python里面的shuffle函数。