我正在与几个朋友一起构建一个应用程序,该应用程序基于对数据的抓取,并从几个特定的网站为用户重新格式化,还有一个登录到某个网站,代表用户刮取数据,以使它看起来更好看。我们只有一台苹果电脑可以工作,我们想要分而治之,所以我们决定让一些人在工作的代码端做更多的工作。
我们转向使用Repl.it和在他们的平台上使用快速。我们想要实现的第一个特性是登录特性,我们很快就用python(因为我们更熟悉)解决了它。经过几个小时的尝试,我的第一个问题是,我们应该如何用cookie和CSRF令牌来编写登录到网站的代码,比如在python中是如何使用请求之类的?
在那不起作用之后,我们试图实现我们认为更简单的网络抓取。结果没那么快。我们学习了几个教程并阅读了文档,但不知道为什么代码没有运行。顺便说一句,只是打印出网站的html是行不通的。
这是我们使用的代码:
import Foundation
let igBaseUrl = "www.example.com/"
let url = URL(string: igBaseUrl)!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else {
print("data was nil")
print()
return
}
guard let htmlString = String(data: data, encoding: String.Encoding.utf8) else {
print("Cannot cast data into string")
return
}
print(htmlString)
print(data)
}
task.resume()
如何在repl中运行抓取代码和格式化代码,以便我们能够正确和快速地将文本格式化并将其包含在我们的应用程序中?
提前谢谢你!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Repl.it上使用Python进行登录和网络抓取时,你需要处理cookie和CSRF令牌以维持会话状态。以下是一个简化的示例,说明如何使用requests
库来实现这一目标:
首先,确保安装了requests
库。在Repl.it中,你通常不需要手动安装它,因为大多数环境已经预装了这个库。
import requests
from bs4 import BeautifulSoup # 如果需要解析HTML的话
# 登录URL和数据
login_url = "https://example.com/login"
login_data = {
"username": "your_username",
"password": "your_password",
"csrfmiddlewaretoken": "GET_THIS_FROM_THE_LOGIN_PAGE_SOURCE" # 实际操作中需要从网页源代码获取或通过请求获得
}
# 使用Session来保持cookie
session = requests.Session()
# 获取登录页面以获取CSRF令牌(如果动态生成)
response = session.get(login_url)
soup = BeautifulSoup(response.text, 'html.parser')
csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']
login_data["csrfmiddlewaretoken"] = csrf_token # 更新你的登录数据
# 尝试登录
response = session.post(login_url, data=login_data)
# 检查是否登录成功,比如检查响应的状态码或内容
if response.status_code == 200:
print("Login successful!")
else:
print(f"Login failed. Status code: {response.status_code}")
# 现在你可以用这个session去访问需要登录的其他页面
scraped_url = "https://example.com/data_page"
scraped_response = session.get(scraped_url)
# 打印或处理抓取到的数据
print(scraped_response.text)
希望这能帮助你们顺利推进项目!