lpp25621832 发表于 2020-6-19 15:22:52

求助各位大神

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



write_clo =

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


请问各位大神,遇到这种情况应该怎么办?

Twilight6 发表于 2020-6-19 15:28:32



你在你报错那一行前面用 global 或者 nonlocal 声明下 tj 变量应该就可以了

wp231957 发表于 2020-6-19 15:28:36

肯定是思路有问题需要改进

lpp25621832 发表于 2020-6-19 16:22:34

Twilight6 发表于 2020-6-19 15:28
你在你报错那一行前面用 global 或者 nonlocal 声明下 tj 变量应该就可以了

我是新手,完全不懂啊 。
就是比如一页没有第十行的存在,是用global还是nonlocal?
不是第10行里面没有内容,而是根本就没有第十行。

xiaofeiyu 发表于 2020-6-19 16:25:16

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

根据你的报错信息,应该在之前加上global tj,将tj变成全局变量

Twilight6 发表于 2020-6-19 16:26:25

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

最简单的就是把你这段代码发上来吧~~

lpp25621832 发表于 2020-6-19 16:31:11

xiaofeiyu 发表于 2020-6-19 16:25
根据你的报错信息,应该在之前加上global tj,将tj变成全局变量

      write_clo =

      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

xiaofeiyu 发表于 2020-6-19 16:32:34

lpp25621832 发表于 2020-6-19 16:31
write_clo =

      global tj


应该是在定义tj的时候加上global tj

lpp25621832 发表于 2020-6-19 16:54:12

xiaofeiyu 发表于 2020-6-19 16:32
应该是在定义tj的时候加上global tj

加上global tj 以后,程序是没有报错了,
可是 我的数据就整个的都错乱了。。。。
因为原本那一格是没有数据的,结果程序自动的把别的数据给填进去了。。。
请教大神,有没有什么方法能让他为空值,但是还是能占个位子。

xiaofeiyu 发表于 2020-6-19 16:56:09

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

为什么会乱呢?
你可以判断一下,如果第10格没有数据,那就自动设为None

lpp25621832 发表于 2020-6-19 16:59:55

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

怎么判断呢?怎么写可以让它自动显示出None?

xiaofeiyu 发表于 2020-6-19 17:01:47

lpp25621832 发表于 2020-6-19 16:59
怎么判断呢?怎么写可以让它自动显示出None?

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

你可以先自己思考一下

lpp25621832 发表于 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/td')
for tj in tj_content:
      tj = tj.get_attribute("innerText")
      print(tj)

请教大神,如何写这个if 语句,能够判断tj是否为None ?

xiaofeiyu 发表于 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
你可以先把运行结果发过来看看

lpp25621832 发表于 2020-6-19 22:15:28

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

它不显示None,而是把下一行的数据提到这一行了,这样数据就错乱了。。。
怎么写个if语句能够让运行到 tj 这一行的时候,不存在就显示None,或者随便打印个数字,例如(0),
存在的时候就正常打印数据。

xiaofeiyu 发表于 2020-6-20 20:45:26

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

如果他自动转到下一行了,那我也想不出什么办法了。。。
对不起我能力有限,你可以请教其他人
或者等我想出思路后再解答这个问题吧。
页: [1]
查看完整版本: 求助各位大神