我正在尝试从网站中提取一些数据-数量不多-但足以保证有一些脚本...我试图首先使用mechanize
登录到网站https://squashlevels.com并cookielib
,但我失败了...
我目前有
from bs4 import BeautifulSoup
import requests
import re
import urllib2
import cookielib
import mechanize
cj = cookielib.CookieJar()
br = mechanize.Browser()
br.set_cookiejar(cj)
br.open("https://squashlevels.com/menu_login.php")
# How do I log in?
r = requests.get('https://squashlevels.com/players.php?all&club=1314')
soup = BeautifulSoup(r.content, "html.parser")
## Do stuff...
我应该使用什么代码登录该网站?
感谢您的时间。
答案 0 :(得分:2)
这是仅使用requests
的解决方案,我不确定mechanize
是否会提供任何附加值。通过利用requests.Session
,您可以维护登录过程返回的cookie,以在请求players.php
时包括在内。
该网站的混乱之处在于,您还需要发布密码的MD5哈希值:
email = 'user@host.com'
password = 'secret'
s = requests.Session()
s.post('https://squashlevels.com/menu_login.php', data={
'action': 'login',
'email': email,
'password': password,
'md5password': hashlib.md5(password.encode('utf-8')).hexdigest()
})
r = s.get('https://squashlevels.com/players.php?all&club=1314')
soup = BeautifulSoup(r.content, 'html.parser')
for row in soup.select('table.ranking tr'):
print([col.text.strip() for col in row.select('td')])
输出:
['1', 'Nathan Miller', 'Bluecoat Sports Horsham', 'East England Masters 2018/19', '6', '15 Dec 2018', '4,706', '70%', '']
['2', 'Kit Pearman', 'Dorking', 'Surrey Winter League 2018/19', '2', '20 Nov 2018', '4,469', '64%', '']
['3', 'Simon Millard', 'Bluecoat Sports Horsham', 'Sussex Mens League 2018/2019', '1', '04 Dec 2018', '2,680', '57%', '']
...
答案 1 :(得分:1)
您可以使用Selenium登录。
from selenium import webdriver
import bs4
email = 'username@email.com'
password = 'password'
driver = webdriver.Chrome()
driver.get('https://squashlevels.com/menu_login.php')
# log in
driver.find_element_by_name("email").send_keys(email)
driver.find_element_by_name("password").send_keys(password)
driver.find_element_by_css_selector("input[type='submit'][value='Login']").click()
# get the html then do some stuff
html = driver.page_source
soup = bs4.BeautifulSoup(html,'html.parser')
答案 2 :(得分:1)
要直接回答您的问题:mechanize
将无法轻松处理此用例,因为此页面上的标记有点怪异-表单控件实际上不在表单本身之外,表单本身为空:
<form action="menu_login.php" method="POST" class="login" data-op-form-id="1"></form>
这导致mechanize
检测到登录表单中的 0个“控件” 。
通过javascript控制“提交”按钮的行为。