python--爬取http://www.kuaidaili.com/并保存为xls

代码如下:

复制在python3上先试试吧^_^

# -*- coding: utf-8 -*-
"""
Created on Mon Jun 12 13:27:59 2017

@author: admin
"""

import urllib.request
import os
import re
from bs4 import BeautifulSoup
import xlwt

os.chdir(r'C:UsersadminDesktop') #把文件储存至桌面
url='http://www.kuaidaili.com/'     #网页地址
req=urllib.request.Request(url)     #打开
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')
#增加User-Agent,更改访问的信息,别让后台太关注
response=urllib.request.urlopen(req)    #继续打开
html=response.read().decode('utf-8')    #编码,变为str格式
soup=BeautifulSoup(html,'lxml')   #这个模块太好用了,这个模块也是这个脚本的核心


ww = soup.find_all('tbody')
ww=str(ww)                   
#rr = re.findall(r'<td (.*)</td>',ww)
#print (ww)      #这几行代码都没有用,但可以发现,ww是不能直接拿来
#print(rr)       #进行检索的,需要要str转一下格式
biaoti=re.findall(r'"(.*)"',ww)
biaoti = set(biaoti)            #把标题去冗余
biaoti=list(biaoti)
biaoti=list(reversed(biaoti))   #所有元素翻转,

item = biaoti.pop(0)   
biaoti.insert(2, item)  
 # 弹出第一个元素,并作为第三个元素插入,来进行位置的调换

list_name=[]
result=[]

for guanjianzi in biaoti:
#    if rr[i].find(guanjianzi) != -1:
    list_name=re.findall(r'"%s">(.*)</td>'%guanjianzi,ww)
    list_name.insert(0,guanjianzi)      #插入标题
    result.extend(list_name)
    
hh=[]

for i in range(0,len(result),11): #由一个列表变为
      hh.append(result[i:i+11])   #一个有很多个列表组成的嵌套列表
    
workbook=xlwt.Workbook()
worksheet=workbook.add_sheet('sheet1',cell_overwrite_ok = True)

for i in range(len(hh)):
    for e in range(len(hh[i])):
         worksheet.write(e,i,hh[i][e])
workbook.save('123.xls')