python - 如何使用 Python 3.7.4 和 beautifulsoup4 抓取 Cyberix3D 网站 (http://www.3dgamemaker.com) 上游戏的所有 URL 链接?
问题描述
我正在尝试调整https://stackoverflow.com/a/46135607/9637147中的代码以抓取 Cyberix3D 网站上游戏的所有 URL 链接。但是当我运行我的代码时它没有这样做,给我一个 403 Forbidden 错误。如何修复我的代码?
这样我就可以更快地将 Cyberix3D 网站上的所有游戏存档到 Wayback Machine ( http://web.archive.org/ ) 上。我尝试在循环useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20170101 Firefox/67.0".encode("utf-8")
的第一行之前添加该行,然后替换为允许代码使用该用户代理,但即便如此,我仍然收到 403 Forbidden 错误。for
html=urlopen(url)
html=urlopen(url,useragent)
from urllib.request import urlopen
from bs4 import BeautifulSoup
file="Cyberix3D games.csv"
f=open(file,"w")
Headers="Link\n"
f.write(Headers)
for page in range(1,410):
url="http://www.gamemaker3d.com/games#page={}&orderBy=Recent".format(page)
html=urlopen(url)
soup=BeautifulSoup(html,"html.parser")
Title=soup.find_all("a",{"href":"views-field-nothing"})
for i in Title:
try:
link=i.find("a",{"href":"/player?pid="}).get_text()
print(link)
f.write("{}".format(link))
except:AttributeError
f.close()
我希望将上述链接打印在 Python 3.7.4 Shell 中,并添加到名为 Cyberix3D games.csv 的 CSV 文件中,但是我在 Python 3.7.4 Shell 中得到urllib.error.HTTPError: HTTP Error 403: Forbidden
了一堆File "C:\Users\Niall Ward\AppData\Local\Programs\Python\Python37-32\lib\urllib\request.py", line x, in y
s 以及而是一个名为 Cyberix3D games.csv 的空 CSV 文件。
解决方案
一些网站阻止不是来自浏览器的连接——反僵尸程序、垃圾邮件等。有许多不同的解决方案可以工作:模拟浏览器来获取,比如说,代理一个合法的响应;您可以在请求中添加标头;等等
运行您的代码后,我尝试了一个比我上面提到的更简单的解决方案:而不是使用from urllib.request import urlopen
我使用过import requests
的并且这样做我不得不改变
# Start by importing requests
import requests
from bs4 import BeautifulSoup
file="Cyberix3D games.csv"
f=open(file,"w")
Headers="Link\n"
f.write(Headers)
for page in range(1,410):
url="http://www.gamemaker3d.com/games#page={}&orderBy=Recent".format(page)
print(url)
# Here we use requests to get the page and its content.
# Note that variables names don't really matter here.
gamemaker_link=requests.get(url)
# Used gamemnaker_link.contetnt and lxml as my parser.
gamemaker_content=BeautifulSoup(gamemaker_link.content, "lxml")
# etc etc etc
要求
如果还没有,则需要安装(我使用了 pip):
- 要求
- lxml
笔记
我不确定处理页面元素是否有任何变化,但这至少应该有助于访问页面。
希望能帮助到你。
快乐编码!
推荐阅读
- kubernetes - Kubernetes 作业只运行四次,根据 `backoffLimit` 参数应该运行六次
- php - 空气动力学计算 PHP
- javascript - 标头函数文件名在 PHP 中不起作用
- flutter - 我可以在 Flutter 中使用一个配置文件运行多个集成测试吗?
- r - R:使用 strsplit 函数计算平均精度的问题
- angular - 角度材料拖放项目,而不是之间
- c# - .NET Core 发布为 exe:如何将程序集信息放入 exe
- python-3.x - 询问金额,根据金额重复提问,合计?
- ios - 绘制或填充颜色时为 CAGradientLayer 设置动画
- django - 如何从 Unity 获取不崩溃的图像文件到 Django?