我不明白下面代碼中的第 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
提交
取消
