python list列表换行写入的问题???焦头烂额

李复唐2 发布于 2018/03/01 10:37
阅读 5K+
收藏 0

我用selenium(python)写了一个数据抓取的脚本,数据结构是:

一级事项7个状态对应的数值

二级事项7个状态对应的数值

三级......

四级......

 

抓取到这样一个列表:

['无', '13', '无', '无', '无', '无', '无', '无', '1242条,', '无', '无', '8', '2', '无', '无', '29', '无', '无', '无', '无', '无', '无', '64', '无', '无', '无', '无', '无']

我最终目的是要写入excel,变成这样的格式

打算写入txt,再用excel导入。但是我遇到的问题,excel导入txt,需要txt写入数据是如下格式:

无 13 无 无 无 无 无 
无 1242条 无 无 8 2 无
无 29 无 无 无 无 无
无 64 无 无 无 无 无

现在的问题,如何才能把列表,以7个一行的形式写入???

#删除了网址和账号、密码,需要vpn,外网也登不了

#一级、二级、三级、四级事项统计,引入了变量,封装重复操作二级、三级、四级
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.support.select import Select
url="xxxxxxx"
driver=webdriver.Chrome()
driver.get(url)
#输入账号、密码
driver.find_element_by_class_name('username').send_keys('xxxxxx')
driver.find_element_by_class_name('password').send_keys('xxxxxx')
#光标选中验证码一栏,此处通过输入一个a,然后删除,把光标停留于此
driver.find_element_by_class_name('yanzhengma').send_keys('a',Keys.BACK_SPACE)
time.sleep(4)
driver.find_element_by_id('login_btn').click()#点击登录
time.sleep(1)


driver.maximize_window()#浏览器最大化
time.sleep(1)
driver.switch_to.frame('iframe')#选中表单

list1=[]
driver.find_element_by_xpath('html/body/div[1]/div[2]/div[2]/div[3]/div[2]/div/span/label').click()#点击高级
driver.find_element_by_xpath('html/body/div[1]/div[2]/div[3]/div[3]/div[2]/div/span[2]/span/label[1]/input').click()
#点击一级深度
pram=('1','2','3','4','5','6','7')
for i in pram:
    time.sleep(1)
    url_pro='html/body/div[6]/div/div[2]/ul/li['+i+']'
    time.sleep(1)
    driver.find_element_by_xpath('html/body/div[1]/div[2]/div[2]/div[3]/div[1]/div/span[2]/span/span[2]/i').click()#点击状态全部
    driver.find_element_by_xpath(url_pro).click()#遍历状态
    time.sleep(1)
    driver.find_element_by_xpath('.//*[@id="searchBtn"]').click()  #点击搜索 
    time.sleep(1)
    a=driver.find_element_by_class_name('info').text[1:-5]#抓取下标
#是否加个if,如果是空,显示0
    if a.strip()=='':
        list1.append('无')
    else:
        list1.append(a)
    time.sleep(1)
with open('C:/Python36/新建.txt','a') as txt:
        txt.write("\n")
        for i in list1:
            txt.write(i)
            
def condition():
    pram=('1','2','3','4','5','6','7')
    for i in pram:
        time.sleep(1)
        url_pro='html/body/div[6]/div/div[2]/ul/li['+i+']'
        time.sleep(1)
        driver.find_element_by_xpath('html/body/div[1]/div[2]/div[2]/div[3]/div[1]/div/span[2]/span/span[2]/i').click()#点击状态全部
        driver.find_element_by_xpath(url_pro).click()#遍历状态
        time.sleep(1)
        driver.find_element_by_xpath('.//*[@id="searchBtn"]').click()  #点击搜索 
        time.sleep(1)
        a=driver.find_element_by_class_name('info').text[1:-5]#抓取下标
        time.sleep(1)
        if a.strip()=='':
            list1.append('无')
        else:
            list1.append(a)
        time.sleep(1)
    with open('C:/Python36/新建.txt','a') as txt:
            txt.write("\n")
            for i in list1:
                txt.write(i)
#    with open('C:/Python36/新建.txt','a') as txt:
#        txt.write("\n")
#        for i in list1:
#            txt.write(i)

z=[('1','2'),('2','3'),('3','4')]
for x,y in z:
    tag1='html/body/div[1]/div[2]/div[3]/div[3]/div[2]/div/span[2]/span/label['+x+']/input'
    tag2='html/body/div[1]/div[2]/div[3]/div[3]/div[2]/div/span[2]/span/label['+y+']/input'
    #print(tag1,tag2)
    driver.find_element_by_xpath(tag1).click()
    driver.find_element_by_xpath(tag2).click()
    #点击三级深度
    condition()

driver.quit()
print(list1)    
#无的问题解决了,但是抓取的数据,很奇怪
print(list_1)

加载中
0
李复唐2
李复唐2

问题我已经解决了,深拷贝,浅拷贝

0
0
李复唐2
李复唐2

我想到了一个解决方法,打算先把数据变成[[xxx],[xxx],[xxx],[xxx]]格式,但是又出错了

返回顶部
顶部