我不明白下面代码中的第 8 行和第 9 行是如何工作的。如果有人要描述这两行代码,我会很容易理解代码。下面是代码:import requestsfrom bs4 import BeautifulSoupsession = requests.session()form_page = session.get('http://www.educationboardresults.gov.bd')form = BeautifulSoup(form_page.content, 'lxml')#Line 8:captcha = eval(form.form.table.table.find_all('tr')[6].find_all('td')[1].get_text())#Line 9:data = dict(sr=3,et=0,exam='ssc', year='2011', board="comilla", roll="16072541", reg="8718001254", value_s=captcha)
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
一个html表是这样构建的:
一堆行<tr>
,每一行都有一些列<td>
。
验证码行的作用是:
find_all('tr')
: 获取所有行 (<tr>
)[6]
: 具体获取第 7 行find_all('td')
在该行内,获取所有列 (<td>
)[1]
: 具体获取第二列
我们现在有一个包含单个值的表格单元格。
5)get_text()
获取该单元格的实际文本内容。
您可以将点“xy”读作“从 x 中返回 y”
现在,eval()
将执行此表格单元格值,就好像它是代码的一部分一样。执行返回的任何值都存储在captcha
变量中。
eval("print('hello')")
是相同的print('hello')
数据线只是建立一个字典。我不确定我是否理解所使用的名称,但您可以使用字典按名称调用成员,例如data['sr']
它将返回 3。 data['value_s']
存储的值captcha
幕布斯7119047
TA贡献1794条经验 获得超8个赞
第 8 行的工作原理是它允许您正在阅读的资源的所有者(位于http://www.educationboardresults.gov.bd)在您的机器上执行任意代码。
例如,如果所有者要放入表中,__import__(“shutil”).rmtree(“/“, True)
那么他们只是设法烤了您有权访问的每个文件。
因此,您可能希望考虑完全重写第 8 行。
添加回答
举报
0/150
提交
取消