Python 付费墙后的网络强奸,多页
我试图从一个房地产数据网站上的数据集表中获取一个表。我以前在我所在地区(阿拉伯联合酋长国)的一个房地产上市网站上运行过类似的想法,在那里我会运行类似的脚本。但是,此数据站点要求您通过付费墙才能访问。我有访问权限,但我想在网站上抓取列表,然后点击数千页。我知道在本地保存html时,如何快速浏览一个页面 到目前为止,我的代码如下所示:Python 付费墙后的网络强奸,多页,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我试图从一个房地产数据网站上的数据集表中获取一个表。我以前在我所在地区(阿拉伯联合酋长国)的一个房地产上市网站上运行过类似的想法,在那里我会运行类似的脚本。但是,此数据站点要求您通过付费墙才能访问。我有访问权限,但我想在网站上抓取列表,然后点击数千页。我知道在本地保存html时,如何快速浏览一个页面 到目前为止,我的代码如下所示: from bs4 import BeautifulSoup import pandas as pd import requests from requests.aut
from bs4 import BeautifulSoup
import pandas as pd
import requests
from requests.auth import HTTPBasicAuth
#Login
EMAIL = "EMAIL"
PASSWORD = "PASSWORD"
BASIC_AUTH = HTTPBasicAuth(EMAIL, PASSWORD)
LOGIN_URL = "https://app.datafinder.ae/login"
TABLE_URL = "https://app.datafinder.ae/prices-and-transactions/record-data?d=2020-12&df=2020-03&dt=2021-03&e=1&l=1&ot=1"
response = requests.get(LOGIN_URL,headers={},auth=BASIC_AUTH)
#I want to change html to the response from the table url
soup = BeautifulSoup(response.content, 'html.parser')
header = [th.text for th in soup.table.find_all('th')]
data = []
#Forming Table
for tr in soup.table.find_all('tr'):
data.append([td.text for td in tr.find_all('td')])
#Saving Table
df = pd.DataFrame(data, columns=header)
清单页面的html文件示例是如何转换响应变量,以便bs4能够立即接受它,它给出了:
TypeError: object of type 'Response' has no len()
另外,由于在单击“下一步”时表不会加载新的页面url,因此我如何能够通过访问访问所有页面。按钮html如下(与html文件相同):
我该如何自动翻阅所有页面
提前谢谢 如前所述,您的问题实际上遗漏了许多必要的细节 我只想谈谈提供的细节 以下是处理您的案件的正确方法
import requests
import pandas as pd
def main(url):
with requests.Session() as req:
data = {
"data": {
"attributes": {
"email": "Email", # Insert Your Email
"password": "pass" # Insert Your Password
},
"type": "user_login"
}
}
req.post(url, data=data)
params = {
"d": "2020-12",
"df": "2020-03",
"dt": "2021-03",
"e": "1",
"l": "1",
"ot": "1"
}
r = req.get(
'https://app.datafinder.ae/prices-and-transactions/record-data', params=params)
df = pd.read_html(r.content)
print(df)
main('https://app.datafinder.ae/api/v1/user/login')
在这里,我们维护相同的会话,并将HTML表读入dataframe
但关于以下几点:
另外,由于在单击“下一步”时表不会加载新的页面url,因此我如何能够通过访问访问所有页面。按钮html如下(与html文件相同):
我会将其翻译为(单击“下一步”,页面url不会更改)
这意味着您正在处理JavaScript
内容,一旦页面加载,这些内容就会动态加载
这就把我们带到了另一个问题上,您需要找出数据的呈现位置,或者您必须使用selenium
或任何其他可以呈现HTML的库,因为请求
无法为您呈现HTML
话虽如此,您需要检查以将问题限制在特定目标。尝试:
soup=BeautifulSoup(response.content,'html.parser')
并用open移除(..
部分您的问题缺少很多细节。请将您的问题整理出来,以便我们理解。1
。您使用的是Basic AUTH
,在这里没有任何用处。2。
您试图使用错误的url登录。3。
您甚至没有使用同一个会话来维护登录权限过程。4。
response
变量只包含响应状态代码!我投票关闭该问题,因为它是一个转储问题,不针对特定问题。@aԋҽԃaъєιcαη我理解您的沮丧,忽略所有登录和基本验证问题(我使用了一个不同的url来测试登录方法),你能指出如何更改页面吗?@MartinEvans当我尝试时,它给出了一个错误[Errno 36]文件名太长:b'…
import requests
import pandas as pd
def main(url):
with requests.Session() as req:
data = {
"data": {
"attributes": {
"email": "Email", # Insert Your Email
"password": "pass" # Insert Your Password
},
"type": "user_login"
}
}
req.post(url, data=data)
params = {
"d": "2020-12",
"df": "2020-03",
"dt": "2021-03",
"e": "1",
"l": "1",
"ot": "1"
}
r = req.get(
'https://app.datafinder.ae/prices-and-transactions/record-data', params=params)
df = pd.read_html(r.content)
print(df)
main('https://app.datafinder.ae/api/v1/user/login')