python - BeautifulSoup 网页有保护和 prettify() 不返回数据
问题描述
我正在尝试从葡萄酒网站获取一些数据。
但我无法评估数据并且有使用违规消息。
网址:https ://www.wine-searcher.com/find/drc/2013
prettify() 结果是这样的:
<div id="bodycontainer">
<div class="colmask contentparent">
<div id="colheader">
<div class="colmask articlecontainer">
<div class="colmidtemp3">
<div class="collefttemp3">
<div class="col1wraptemp3">
<div class="col1temp3">
<div>
<h1 style="margin:50px 0 0">
Usage Violation
</h1>
<div style="margin-bottom:50px;padding:50px 10px;background-color:#FFFACD">
<h2 style="font-size:1.4em">
Blocked
</h2>
<p style="font-size:1.2em">
The IP Address [xx.xxx.xxx.xx] you are using has been used in violation of Wine-Searcher's usage guidelines.
<b>
If you think you have received this message in error restart your web browser and retry accessing wine-searcher.com.
</b>
</p>
<p style="font-size:1.2em">
To re-gain access to Wine-Searcher please
<a href="mailto:wsexcessiveuse@wine-searcher.com?subject=Blocked IP=1 ID=PVBXC7PJCM80025">
Contact Us
</a>
.
</p>
</div>
</div>
</div>
</div>
有没有办法从 url 获取数据?太感谢了。
我的编码在这里:
# -*- coding: utf-8 -*-
import bs4
import re
import requests
import sys
from bs4 import BeautifulSoup
name = "Wine.txt"
k = open(name, "w", encoding='utf-8')
Stat_url = "https://www.wine-searcher.com/find/drc/2012"
page = requests.get(Stat_url)
soup = bs4.BeautifulSoup(page.text,'lxml')
k.write(soup.prettify())
解决方案
看起来他们在他们的页面上添加了一些保护来防止你尝试做的事情;)他们通过 API https://www.wine-searcher.com/api.lml出售访问权限,并允许在 5 次试用中进行 100 次调用天。也许这对你来说已经足够了?
我猜 BeautifulSoup 会在短时间内尝试很多请求?(也许将其限制为每 10 秒一个并让它运行一夜?) BS 中的代理 ID 可以更改为更常见的东西,例如常规浏览器代理 ID?
推荐阅读
- c# - 将组合框的值设置为从源收集的值
- arrayindexoutofboundsexception - java.lang.ArrayIndexOutOfBoundsException 长度=42;index=42 android.text.Layout$HorizontalMeasurementProvider.get(Layout.java:1416)
- java - java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:无效的密钥格式
- ios - 目标C中字符串的日期与工作日
- c# - 独立的测试运行程序,作为 Windows 应用程序运行
- c# - 根据地图标记上的经度和纬度旋转图像
- wpf - 排序插入符号不显示
- flutter - 如何在颤振中模拟数据库
- javascript - Google App Script - 无法使用 API 中的数据设置值
- beanshell - 如何在 beanshell 中捕获异常?