前段时间老板给了一个任务是让爬取百度搜索页内的url、时间和标题并存储到excel表内,获取内容很简单,但是存储到excel表的时候被难倒了。因为自己之前并没有做过,当时第一想法是先存储到数据库中,然后用pandas导出来并以csv的格式存储,但是失败了,然后就想直接存txt格式,自己在手动改,但是数据量太大也放弃了。最后知道python有个函数,是专门用来存储成excel表的内容,最后也成功了,但是还有个问题没有解决,就是因为网页分页的原因,导致每次只能写入一页,如果直接写入第二页,会覆盖第一页的内容,最后自己也是通过做循环,写了几百个excel表(很笨)。后来查看资料,才发现可以通过每次自增一个excel列,就可以了。
附上代码!
import requests from lxml import etree import json,re import xlwt from urllib import request def get(): headers={ 'User-Agent':'Mozilla / 5.0(Windows NT 10.0; WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 69.0.3497.100Safari / 537.36', 'Cookie':'CnlIds = 152223698257775188;UM_distinctid = 1661894b409436 - 06cfa416eee02b - 36664c08 - 100200 - 1661894b40af6;__auc = 1e491ce3166e3357e36fa846ce7; Hm_lvt_c378c4854ec370c1c8438f72e19b7170 = 1545875563, 1545881702, 1545881723, 1546502118', 'Accept':'text / html, application / xhtml + xml, application / xml;q = 0.9, image / webp, image / apng, * / *;q = 0.8', 'Accept - Encoding': 'gzip, deflate', 'Accept - Language': 'zh - CN, zh; q = 0.9', 'Cache - Control': 'max - age = 0', 'Connection': 'keep - alive', 'Host': 'so.cnfol.com', 'Upgrade - Insecure - Requests':'1' } for i in range(1,76): url='http://so.cnfol.com/cse/search?q=汉能&p='+str(i)+'&s=12596448179979580087&srt=def&nsid=1' res=requests.get(url,headers=headers) res.encoding = 'utf-8' Html=res.text #html = etree.HTML(html) html = etree.HTML(Html) url=html.xpath('//h3//@href') tit=html.xpath('//h3//text()') s='' for i in tit: s=s+i s=s.split('_')[0] date=html.xpath('//span//text()') for j in date: da=re.findall(r'\d{4}-\d{1,2}-\d{1,2}',j) if da!=[]: for i in da: item = { 'url': url, 'title': s, 'date': i, } lst=[] lst.append(item) testXlwt('jjj.xlsx', lst) return lst def testXlwt(file = '0.xlsx', list = []): book = xlwt.Workbook() #创建一个Excel sheet1 = book.add_sheet('first') #在其中创建一个名为first的sheet i = 0 #行序号 for app in list : #遍历list每一行 j = 0 #列序号 try: for x in app : #遍历该行中的每个内容(也就是每一列的) sheet1.write(i, j, x) #在新sheet中的第i行第j列写入读取到的x值 j = j + 1 # 列号递增 except: continue finally: i = i+1 #行号递增 book.save(file) #创建保存文件
因为工作中主要是使用pyspider框架,但是我到今天才知道,pyspider框架的webui页面的result内可以直接下载result为csv格式,这样就不用考虑如何将代码存成excel格式的问题了,直接获取并return data后就可以了!还是自己太笨了!!!
step1:
step2: