如何从包含循环的函数中抓取数据

时间:2017-05-09 10:31:41

标签: python beautifulsoup scrape

我正在学习Web Scraping(使用Python和Beautiful Soup),我遇到了如何在包含循环的函数中抓取数据的问题。我试图获得的数据是在if,else语句的条件下,如下所示。(页面来源如下)

我想废弃" 密码:h7s6sh "

**<SCRIPT>
function passWord() {
var testV = 1;
var pass1 = prompt('Please Enter Your Password',' ');
while (testV < 3) {
if (!pass1) 
history.go(-1);
if (pass1.toLowerCase() == "ratedr") 
{
  alert('You Got it Right!');
  document.write("<center><h1>Username : hellomrxyz@gmail.com<p>Password :  h7s6sh</p></h1><p>NOTE : Visit daily Everyday</p><p><h1>Thank You!</h1></p></center>");break;
   } 
 testV+=1;
 var pass1 = prompt('Access Denied - Password Incorrect, Please Try Again.','Password');
}
if (pass1.toLowerCase()!="password" & testV ==3) 
history.go(-1);
return " ";
} 
</SCRIPT>**

这是我尝试的脚本

&GT;&GT;&GT; script_mim.text

u'\nfunction passWord() {\nvar testV = 1;\nvar pass1 = prompt(\'Please Enter Your Password\',\' \');\nwhile (testV < 3) {\nif (!pass1) \nhistory.go(-1);\nif (pass1.toLowerCase() == "ratedr") {\nalert(\'You Got it Right!\');\ndocument.write("<center><h1>Username : hellomrxyz@gmail.com<p>Password : h7s6sh</p></h1><p>NOTE : Visit daily Everyday</p><p><h1>Thank You!</h1></p></center>");\nbreak;\n} \ntestV+=1;\nvar pass1 = \nprompt(\'Access Denied - Password enter code hereIncorrect, Please Try Again.\',\'Password\');\n}\nif (pass1.toLowerCase()!="password" & testV ==3) \nhistory.go(-1);\nreturn " ";\n} \n\n'

&GT;&GT;&GT; script_mim.find_all(&#39; P&#39)

[]

为什么没有显示任何内容?我使用的是最新版本的python 3.x.你能用解决方案告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

美丽的汤只会理解并尝试解析标签而不是这些标签内的数据。由于<script>标记的提取内容将是unicode字符串,因此您无法解析结果。因此,您必须对结果执行字符串操作才能获得输出。您可以找到<p></p>的索引,并可以使用列表理解提取该标记并使用漂亮的汤重新分析以获得输出(方法1)或者您可以执行对结果进行直接字符串操作以获得输出(方法2)

  1. 如果您通过重新分析由字符串提取的<p></p>标记 使用BeautifulSoup操作然后你的代码将

    soup=BeautifulSoup(script_mim.text[272:script_mim.text.find('</h1>')],"html.parser") #reinitialize beautifulsoup by extarcting <p> tag
    soup.find("p").get_text() #this will give you desired output.
    
  2. 如果您通过字符串操作来解析数据并获取密码 你的代码将是

    script_mim.text[script_mim.text.find('<p>')+3:script_mim.text.find('</h1>')] 
    
  3. 我建议使用方法2,因为与方法1相比,字符串操作便宜。