jianfen's blog

Information is beautiful

利用requests,csv等库

https://docs.python.org/2/library/csv.html
http://www.python-requests.org/en/latest/


#coding=utf-8
import requests
import os
import sys
import csv
import time
import codecs
from lxml import etree
sys.getdefaultencoding()
reload(sys)
sys.setdefaultencoding('UTF-8')
sys.getdefaultencoding()



class Infoget():
    def __init__(self):
        self.url = 'http://******'
        self.s = requests.Session()#登录保存cookies
        self.c = 0
    def login(self):
        purl = self.url+'check.asp'
        data = "*****"
        #proxy = {'http':'127.0.0.1:8080'} 代理用于测试和排错
        head = {'Content-Type': 'application/x-www-form-urlencoded'}#post包请求类型必须要
        self.s.post(purl,data=data,headers=head)#登录post包

    def userinfo(self):
        for i in range(1,4156):#遍历某信息系统页数
            gurl = self.url+'user.php?page='+str(i)
            requests.adapters.DEFAULT_RETRIES = 5#设置最大并发请求
            time.sleep(1)#延迟避免异常报错
            html = self.s.get(gurl).content.decode('gbk')#对于中文需要gbk编码 否则乱码

            selector = etree.HTML(html)
            info = selector.xpath('//td[@align="left"]') # XPATH语法获取需要数据列表
            users = [i.xpath('string(.)').strip() for i in info]#数据空格等其他不可见字符过滤

            ulist = [] # 存入csv数据需要这种格式 data = [(1,2,3),(I,love,you),(think,you,!)]
            #users获取到的数据是一个列表要将他拆分为 同上注释的内容
                        count = -1
            for x in range(len(users)):
                if users[x] == '0':
                    count = count+1
                    ulist.append(tuple(users[count:x]))
                    count = x
            self.wrcsv(ulist)#写入csv文件


    def wrcsv(self,ulist):
        csvfile = file('csvtest.csv', 'ab')#打开一个csv文件流
        csvfile.write(codecs.BOM_UTF8)#定义文件编码
        writer = csv.writer(csvfile)
                #返回一个writer对象,负责将用户的数据转换为给定类文件对象上的分隔字符串。
        writer.writerows(ulist)#多行数据写入 我这里是按照列表中 每3个元祖一组 
        csvfile.close()
        self.c = self.c + 1
        print 'spider..'+str(self.c)+' page'


getinfo = Infoget()
getinfo.login()
getinfo.userinfo()


添加新评论 »

在这里输入你的评论...

勿忘初心,方得始终.