python请求无法获取整页

时间:2020-02-26 14:47:03

标签: python web beautifulsoup request screen-scraping

“”“”这是我的密码“”“

import requests
from bs4 import BeautifulSoup
import random
from selenium import webdriver
url ="http://www.yopmail.com/en/?smith"
request = requests.get(url)
soup = BeautifulSoup(request.text, 'html5lib')
print(soup)

“”“它返回了此输出”“”

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
</head>
<body onload="document.getElementById('f').submit();">
<form action="." id="f" method="post">
<input id="yp" name="yp" type="hidden" value="XAQHlAwL5ZwL1ZQZlAGH3ZGV"/>
<input id="login" name="login" type="hidden" value="smith"/>
<input id="id" name="id" type="hidden" value=""/>
</form>
<noscript><br/><br/>  <strong>Your browser does not support javascript or it may be disabled</strong></noscript>

</body></html>

“”“我要使用整个SRC代码代替”“”

2 个答案:

答案 0 :(得分:0)

发生这种情况是因为在执行Javascript之前,请求已获得了源。 您可以安装requests-html并从requests_html导入HTMLSession。 支持的功能:

  • 完全支持JavaScript!
  • CSS选择器(又称jQuery风格,这要归功于PyQuery)。
  • XPath选择器,使您胆战心惊。
  • 模拟的用户代理(如真实的网络浏览器)。
  • 自动跟踪重定向。
  • 连接池和cookie持久性。
  • 借助神奇的解析,您了解和喜爱的请求体验 能力。
  • 异步支持

示例:

pip install requests-html

from requests_html import HTMLSession
from requests_html import AsyncHTMLSession

url2search = "https://******"
session = HTMLSession()
r = session.get(url2search)

JS的呈现方式为:

r.html.render()

请注意,您第一次运行render()方法时,它将把Chromium下载到您的主目录(例如〜/ .pyppeteer /)。这只会发生一次。您可能还需要安装一些Linux软件包才能使pyppeteer正常工作。

有关this link的更多详细信息。

答案 1 :(得分:0)

我宁愿将其写为评论而不是答案,因为我只是给您一个提示,但我没有足够的声誉来撰写评论。这是我的两分钱:

注意行

<body onload="document.getElementById('f').submit();">
<form action="." id="f" method="post">

在您的HTML来源中。这可能是非常基本的保护措施,可以防止像您打算的那样进行刮刮尝试,并且可以将requests.get的使用更改为requests.post足以;包括更改类似GET的参数

/?史密斯

在网址中

改为POST参数。

但是,同样好,之后您可能还会遇到更多需要使用JavaScript的代码。在这种情况下,请检查Basu_C的其他答案。