鱼C论坛

 找回密码
 立即注册
查看: 1252|回复: 15

[已解决]求助各位大神

[复制链接]
发表于 2020-6-19 15:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用爬虫爬取表格的时候,因为每一页的表格长度不一样,比如爬取每一页的前10行的时候,有的表格会没有第10行,然后爬虫就自动停止了。。。。



write_clo = [ta, tb, tc, td, te, tf, tg, th, ti, tj]

df = pd.DataFrame(columns=(write_clo))

df.to_csv('demo.csv', line_terminator="\n", index=False, mode='a', encoding='utf8')

这个时候就会报错:local variable 'tj' referenced before assignment


请问各位大神,遇到这种情况应该怎么办?
最佳答案
2020-6-19 16:32:34
lpp25621832 发表于 2020-6-19 16:31
write_clo = [ta, tb, tc, td, te, tf, tg, th, ti, tj]

        global tj

应该是在定义tj的时候加上global tj
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-19 15:28:32 | 显示全部楼层


你在你报错那一行前面用 global 或者 nonlocal 声明下 tj 变量应该就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 15:28:36 | 显示全部楼层
肯定是思路有问题  需要改进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 16:22:34 | 显示全部楼层
Twilight6 发表于 2020-6-19 15:28
你在你报错那一行前面用 global 或者 nonlocal 声明下 tj 变量应该就可以了

我是新手,完全不懂啊 。
就是比如  一页没有第十行的存在,是用global还是nonlocal?
不是第10行里面没有内容,而是根本就没有第十行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 16:25:16 | 显示全部楼层
lpp25621832 发表于 2020-6-19 16:22
我是新手,完全不懂啊 。
就是比如  一页没有第十行的存在,是用global还是nonlocal?
不是第10行里面没 ...

根据你的报错信息,应该在之前加上global tj,将tj变成全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 16:26:25 | 显示全部楼层
lpp25621832 发表于 2020-6-19 16:22
我是新手,完全不懂啊 。
就是比如  一页没有第十行的存在,是用global还是nonlocal?
不是第10行里面没 ...

最简单的就是把你这段代码发上来吧~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 16:31:11 | 显示全部楼层
xiaofeiyu 发表于 2020-6-19 16:25
根据你的报错信息,应该在之前加上global tj,将tj变成全局变量

        write_clo = [ta, tb, tc, td, te, tf, tg, th, ti, tj]

        global tj
        
        df = pd.DataFrame(columns=(write_clo))

        df.to_csv('demo5.csv', line_terminator="\n", index=False, mode='a', encoding='utf8')

然后报错:SyntaxError: name 'tj' is used prior to global declaration

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 16:32:34 | 显示全部楼层    本楼为最佳答案   
lpp25621832 发表于 2020-6-19 16:31
write_clo = [ta, tb, tc, td, te, tf, tg, th, ti, tj]

        global tj

应该是在定义tj的时候加上global tj
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 16:54:12 | 显示全部楼层
xiaofeiyu 发表于 2020-6-19 16:32
应该是在定义tj的时候加上global tj

加上global tj 以后,程序是没有报错了,
可是 我的数据就整个的都错乱了。。。。
因为原本那一格是没有数据的,结果程序自动的把别的数据给填进去了。。。
请教大神,有没有什么方法能让他为空值,但是还是能占个位子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 16:56:09 | 显示全部楼层
lpp25621832 发表于 2020-6-19 16:54
加上global tj 以后,程序是没有报错了,
可是 我的数据就整个的都错乱了。。。。
因为原本那一格是没 ...

为什么会乱呢?
你可以判断一下,如果第10格没有数据,那就自动设为None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 16:59:55 | 显示全部楼层
xiaofeiyu 发表于 2020-6-19 16:56
为什么会乱呢?
你可以判断一下,如果第10格没有数据,那就自动设为None

怎么判断呢?怎么写可以让它自动显示出None?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 17:01:47 | 显示全部楼层
lpp25621832 发表于 2020-6-19 16:59
怎么判断呢?怎么写可以让它自动显示出None?


具体不清楚你的代码结构,但是主要就是用if
当判断到只有九个数据时,tj=None

你可以先自己思考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 17:12:43 | 显示全部楼层
xiaofeiyu 发表于 2020-6-19 17:01
具体不清楚你的代码结构,但是主要就是用if
当判断到只有九个数据时,tj=None

element = driver.find_element_by_xpath('//*[@id="datalist"]/table')
tj_content = element.find_elements_by_xpath('//*[@id="datalist"]/table/tbody/tr[last()-9]/td[1]')
for tj in tj_content:
      tj = tj.get_attribute("innerText")
      print(tj)

请教大神,如何写这个if 语句,能够判断tj是否为None ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 20:19:19 | 显示全部楼层
lpp25621832 发表于 2020-6-19 17:12
element = driver.find_element_by_xpath('//*[@id="datalist"]/table')
tj_content = element.find_ele ...

那需要看innerText是什么了。。。
按理说如果没有这个信息tj就是None
你可以先把运行结果发过来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 22:15:28 | 显示全部楼层
xiaofeiyu 发表于 2020-6-19 20:19
那需要看innerText是什么了。。。
按理说如果没有这个信息tj就是None
你可以先把运行结果发过来看看

它不显示None,而是把下一行的数据提到这一行了,这样数据就错乱了。。。
怎么写个if语句能够让运行到 tj 这一行的时候,不存在就显示None,或者随便打印个数字,例如(0),
存在的时候就正常打印数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 20:45:26 | 显示全部楼层
lpp25621832 发表于 2020-6-19 22:15
它不显示None,而是把下一行的数据提到这一行了,这样数据就错乱了。。。
怎么写个if语句能够让运行到 t ...

如果他自动转到下一行了,那我也想不出什么办法了。。。
对不起我能力有限,你可以请教其他人
或者等我想出思路后再解答这个问题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表