Ben*_*dik 6 html python url web-scraping
尝试从网站检索页面源,我得到的文本与通过Web浏览器查看相同页面源时完全不同(和更短).
这个家伙有一个相关的问题,但获得了主页来源而不是请求的 - 我得到的东西完全是外星人.
代码是:
from urllib import request
def get_page_source(n):
url = 'https://www.whoscored.com/Matches/' + str(n) + '/live'
response = request.urlopen(url)
return str(response.read())
n = 1006233
text = get_page_source(n)
Run Code Online (Sandbox Code Playgroud)
这是我在此示例中定位的页面:https: //www.whoscored.com/Matches/1006233/live
有问题的网址包含页面源中的丰富信息,但在运行上述代码时,我最终只得到以下信息:
text =
b'<html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX,
NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta
name="viewport" content="initial-scale=1.0"><meta http-equiv="X-
UA-Compatible" content="IE=edge,chrome=1"></head><body style="margin:0px;
height:100%"><iframe src="/_Incapsula_Resource?CWUDNSAI=24&
xinfo=0-12919260-0 0NNY RT(1462118673272 111) q(0 -1 -1 -1) r(0 -1)
B12(4,315,0) U2&incident_id=276000100045095595-100029307305590944&edet=12&
cinfo=04000000" frameborder=0 width="100%" height="100%" marginheight="0px"
marginwidth="0px">Request unsuccessful. Incapsula incident ID:
276000100045095595-100029307305590944</iframe></body></html>'
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?服务器是否可以检测到机器人,即使它没有发送重复请求 - 如果是,如何 - 并且有办法吗?
tkn*_*man 10
这里有几个问题.根本原因是你试图抓住的网站知道你不是一个真实的人并且阻止你.许多网站通过检查标题来查看请求是否来自浏览器(机器人),从而实现此目的.但是,这个网站看起来像是使用Incapsula,它旨在提供更复杂的保护.您可以尝试以不同的方式设置您的请求,通过设置标题来欺骗页面上的安全性 - 但我怀疑这会起作用.
import requests
def get_page_source(n):
url = 'https://www.whoscored.com/Matches/' + str(n) + '/live'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
return response.text
n = 1006233
text = get_page_source(n)
print text
Run Code Online (Sandbox Code Playgroud)
看起来该网站也使用验证码 - 旨在防止网页抓取.如果一个网站正在努力防止抓取 - 可能是因为他们提供的数据是专有的.我建议找另一个提供此数据的网站 - 或尝试使用官方API.
不久前看看这个(/sf/answers/1243898001/)的答案.看起来whoscored.com使用OPTA API来提供信息.您可以跳过中间人并直接进入数据源.祝好运!
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |