使用python登录网站并进行网页抓取
我正试图找出方法,为我的研究项目在一个房地产网站上搜刮网页。我一直在selenium和beautiful soup之间进行尝试,并决定选择beautiful soup对我来说是最好的方式,因为每个房地产的url结构允许我的代码轻松快速地浏览网站 我正在尝试为每个不动产建立一个数据库事务。如果不登录,则仅显示特定属性的10个最新事务。通过登录,我可以访问特定类型财产的整个交易。这是一个例子 我尝试使用python中的请求登录,但它一直将我带到未登录的页面,结果,我只是设法放弃了最近的10个事务,而不是整个事务。下面是我用python编写的登录代码示例使用python登录网站并进行网页抓取,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试图找出方法,为我的研究项目在一个房地产网站上搜刮网页。我一直在selenium和beautiful soup之间进行尝试,并决定选择beautiful soup对我来说是最好的方式,因为每个房地产的url结构允许我的代码轻松快速地浏览网站 我正在尝试为每个不动产建立一个数据库事务。如果不登录,则仅显示特定属性的10个最新事务。通过登录,我可以访问特定类型财产的整个交易。这是一个例子 我尝试使用python中的请求登录,但它一直将我带到未登录的页面,结果,我只是设法放弃了最近的10个事务
import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.brickz.my/login/", auth=
('email', 'password'))
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G928X Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36'}
soup = BeautifulSoup(page.content, 'html.parser')
#I put one of the property url to be scrapped inside response
response = get("https://www.brickz.my/transactions/residential/kuala-
lumpur/titiwangsa/titiwangsa-sentral-condo/non-landed/?range=2012+Oct-",
headers = headers)
这是我用来擦桌子的东西
table = BeautifulSoup(response.text, 'html.parser')
table_rows = table.find_all('tr')
names = []
for tr in table_rows:
td = tr.find_all('td')
row = [i.text for i in td]
names.append(row)
我如何才能成功登录并访问整个交易?我听说了Mechanize库,但它不适用于Python3
如果我的问题不清楚,我很抱歉,这是我第一次发帖,我几个月前才学会使用python。一个简单的HTTP跟踪将显示发到
https://www.brickz.my/login/
使用电子邮件
和pw
作为表单参数
转换为以下请求命令:
session = requests.Session()
resp = session.post('https://www.brickz.my/login/', data={'email': '<youremail>', 'pw': '<yourpassword'})
if resp.ok:
print("You should now be logged in")
# then use session to request the site, like
# resp = session.get("https://www.brickz.my/whatever")
session=requests.session()
resp=会话。post('https://www.brickz.my/login/,data={'email':'','pw':'试试下面的代码。当你打印它时,你看到了什么(更改电子邮件和密码)
)?结果不是打印注销
import requests
from bs4 import BeautifulSoup
URL = "https://www.brickz.my/login/"
payload = {
'email': 'your_email',
'pw': 'your_password',
'submit': 'Submit'
}
with requests.Session() as s:
s.headers = {"User-Agent":"Mozilla/5.0"}
s.post(URL,data=payload)
res = s.get("https://www.brickz.my/")
soup = BeautifulSoup(res.text,"lxml")
for items in soup.select("select#menu_select .nav2"):
data = [' '.join(item.text.split()) for item in items.select("option")[-1:]]
print(data)
您好@Guillaume。感谢您的快速反馈。我尝试了您的建议,并将新声明的resp放在表格的beautifulSoup中,但我仍然面临同样的问题。我做了一些实验,在会话中插入了假电子邮件和假密码。get。我仍然得到“您现在应该登录了”。你知道为什么会发生这种情况吗?这完全取决于网站。此外,网站可以有一些防僵尸程序的保护功能,阻止非浏览器登录和正确使用网站。嗨,纪尧姆,我找到了解决我问题的方法。无论如何,感谢你对我的帮助:)你好@SIM,我做了你以前做过的事,结果打印了注销。我能知道我能做些什么来克服这个问题吗?实际上,你想克服什么?我的意思是,你只有在登录后才能看到注销
选项。很抱歉我不知道,我认为注销意味着我还没有登录。谢谢你的澄清,我成功地做到了在运行您的代码登录后立即废弃表格。非常感谢您!!!!!:):)