您的位置:首页 > 编程语言 > Python开发

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')

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐