生化危机 浣熊市行动

当前位置:澳门新葡亰平台官网 > 生化危机 浣熊市行动 > 所以进行了进一步的交流讨论

所以进行了进一步的交流讨论

来源:http://www.baimantang.net 作者:澳门新葡亰平台官网 时间:2019-11-14 18:25

    继上大器晚成篇所以进行了进一步的交流讨论。【Python数据拆解深入分析】Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250开展爬取今后,鉴于还应该有风度翩翩对难题远非减轻,所以进行了一发的调换钻探,这里面获得了二头尼玛的有倾囊相助与启示,十分多谢!

    上次存在的主题素材如下:

所以进行了进一步的交流讨论。    1.写入不可能一而再三回九转的主题材料

    2.在Python IDLE中一览无余输出准确的结果,写到excel中就乱码了。

    上述五个难点促使自个儿纠正excel处理模块,因为传说xlwt只帮助到Excel 二〇〇〇,很有相当的大恐怕会出标题。

    固然“一头尼玛”给了一个Validate函数,但是这是照准去除Windows下文件名中国和欧洲法字符的函数,跟写入excel乱码未有涉嫌,所以依旧思谋更动模块。

所以进行了进一步的交流讨论。更换xlsxwriter模块

所以进行了进一步的交流讨论。    此番作者改成xlsxwriter那么些模块,. 相仿能够pip3 install xlsxwriter,自动下载安装,简便易行。一些用法样例:

import xlsxwriter

# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()

决断改换写入excel的代码。效果如下:

图片 1

果然如此鼻子是鼻子脸是脸,该是链接就是链接,不管怎么着字符都能写,究竟unicode。

所以说,选对模块十分重大选对模块很关键选对模块很要紧!(重说三)

若是要爬的剧情不是很公道标准的字符串或数字来讲,我是不会用xlwt啦。

此间有4中Python写入excel的模块相比较:

自己截了八个比较图如下,具体可以看上面这篇小说,非常详细!

图片 2

沿波讨源

本条既然如此通畅,还足以写入图片,那大家何不尝试看呢?

指标:把图片链接那一列的源委换到真正的图形!

事实上超粗略,因为大家事先已经有了图片的积攒路线,把它插入到里头就能够了。

    the_img = "I:\douban\image\"+bookName+".jpg"
    writelist=[i+j,bookName,nickname,rating,nums,the_img,bookurl,notion,tag]
    for k in range(0,9):
        if k == 5:
            worksheet.insert_image(i+j,k,the_img)
        else:
            worksheet.write(i+j,k,writelist[k])

出去是这么的功用,显然不美观,那大家相应适中调度一些每行的莫斯中国科学技术大学学,以致让他俩居中间试验试看:

图片 3

查阅xlsxwriter文书档案可以预知,能够那样设置行列宽度和居中:(当然,那么些操作在excel中可以直接做,并且可能会比写代码更加快,不过自己倒是想越多试试那些模块卡塔 尔(英语:State of Qatar)

format = workbookx.add_format()
format.set_align('justify')
format.set_align('center')
format.set_align('vjustify')
format.set_align('vcenter')
format.set_text_wrap()

worksheet.set_row(0,12,format)
for i in range(1,251):
    worksheet.set_row(i,70)
worksheet.set_column('A:A',3,format)
worksheet.set_column('B:C',17,format)
worksheet.set_column('D:D',4,format)
worksheet.set_column('E:E',7,format)
worksheet.set_column('F:F',10,format)
worksheet.set_column('G:G',19,format)
worksheet.set_column('H:I',40,format)

于今截止实现了excel的写入,只然则设置格式那块实在繁琐,得反复调节和测量检验间隔,大小,所以在excel里面做会简单些。

最后代码:

图片 4图片 5

# -*- coding:utf-8 -*-
import requests
import re
import xlwt
import xlsxwriter
from bs4 import BeautifulSoup
from datetime import datetime
import codecs

now = datetime.now()             #开始计时
print(now)

def validate(title):                        #from nima
    rstr = r"[/\:*?"<>|]"          # '/:*?"<>|-'
    new_title = re.sub(rstr, "", title)
    return new_title

txtfile = codecs.open("top2501.txt",'w','utf-8')
url = "http://book.douban.com/top250?"

header = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36",
           "Referer": "http://book.douban.com/"
           }

image_dir = "I:\douban\image\"
#下载图片
def download_img(imageurl,imageName = "xxx.jpg"):
    rsp = requests.get(imageurl, stream=True)
    image = rsp.content
    path = image_dir + imageName +'.jpg'
    #print(path)
    with open(path,'wb') as file:
        file.write(image)

#建立Excel
workbookx = xlsxwriter.Workbook('I:\douban\btop250.xlsx')
worksheet = workbookx.add_worksheet()
format = workbookx.add_format()
format.set_align('justify')
format.set_align('center')
format.set_align('vjustify')
format.set_align('vcenter')
format.set_text_wrap()

worksheet.set_row(0,12,format)
for i in range(1,251):
    worksheet.set_row(i,70)
worksheet.set_column('A:A',3,format)
worksheet.set_column('B:C',17,format)
worksheet.set_column('D:D',4,format)
worksheet.set_column('E:E',7,format)
worksheet.set_column('F:F',10,format)
worksheet.set_column('G:G',19,format)
worksheet.set_column('H:I',40,format)

item = ['书名','别称','评分','评价人数','封面','图书链接','出版信息','标签']
for i in range(1,9):
    worksheet.write(0,i,item[i-1])

s = requests.Session()      #建立会话
s.get(url,headers=header)

for i in range(0,250,25):  
    geturl = url + "/start=" + str(i)                     #要获取的页面地址
    print("Now to get " + geturl)
    postData = {"start":i}                                #post数据
    res = s.post(url,data = postData,headers = header)    #post
    soup = BeautifulSoup(res.content.decode(),"html.parser")       #BeautifulSoup解析
    table = soup.findAll('table',{"width":"100%"})        #找到所有图书信息的table
    sz = len(table)                                       #sz = 25,每页列出25篇文章
    for j in range(1,sz+1):                               #j = 1~25
        sp = BeautifulSoup(str(table[j-1]),"html.parser") #解析每本图书的信息

        imageurl = sp.img['src']                          #找图片链接
        bookurl = sp.a['href']                            #找图书链接
        bookName = sp.div.a['title']
        nickname = sp.div.span                            #找别名
        if(nickname):                                     #如果有别名则存储别名否则存’无‘
            nickname = nickname.string.strip()
        else:
            nickname = ""

        notion = str(sp.find('p',{"class":"pl"}).string)   #抓取出版信息,注意里面的.string还不是真的str类型
        rating = str(sp.find('span',{"class":"rating_nums"}).string)    #抓取平分数据
        nums = sp.find('span',{"class":"pl"}).string                    #抓取评分人数
        nums = nums.replace('(','').replace(')','').replace('n','').strip()
        nums = re.findall('(d+)人评价',nums)[0]
        download_img(imageurl,bookName)                     #下载图片
        book = requests.get(bookurl)                        #打开该图书的网页
        sp3 = BeautifulSoup(book.content,"html.parser")     #解析
        taglist = sp3.find_all('a',{"class":"  tag"})       #找标签信息
        tag = ""
        lis = []
        for tagurl in taglist:
            sp4 = BeautifulSoup(str(tagurl),"html.parser")  #解析每个标签
            lis.append(str(sp4.a.string))

        tag = ','.join(lis)        #加逗号
        the_img = "I:\douban\image\"+bookName+".jpg"
        writelist=[i+j,bookName,nickname,rating,nums,the_img,bookurl,notion,tag]
        for k in range(0,9):
            if k == 5:
                worksheet.insert_image(i+j,k,the_img)
            else:
                worksheet.write(i+j,k,writelist[k])
            txtfile.write(str(writelist[k]))
            txtfile.write('t')
        txtfile.write(u'rn')

end = datetime.now()    #结束计时
print(end)
print("程序耗时: " + str(end-now))
txtfile.close()
workbookx.close()

View Code

运行结果如下:

2016-03-28 11:40:50.525635
Now to get http://book.douban.com/top250?/start=0
Now to get http://book.douban.com/top250?/start=25
Now to get http://book.douban.com/top250?/start=50
Now to get http://book.douban.com/top250?/start=75
Now to get http://book.douban.com/top250?/start=100
Now to get http://book.douban.com/top250?/start=125
Now to get http://book.douban.com/top250?/start=150
Now to get http://book.douban.com/top250?/start=175
Now to get http://book.douban.com/top250?/start=200
Now to get http://book.douban.com/top250?/start=225
2016-03-28 11:48:14.946184
程序耗时: 0:07:24.420549

图片 6

胜利爬完250本书。此番爬取行动就金科玉律来讲已告成功!

此次耗费时间7分24秒,依然显得太慢了。下一步就应有是如何在提升作用上边下武功了。

本文由澳门新葡亰平台官网发布于生化危机 浣熊市行动,转载请注明出处:所以进行了进一步的交流讨论

关键词:

上一篇:是这几个习惯

下一篇:没有了