无法从网页上抓取静态信息

时间:2019-08-05 18:16:46

标签: python python-3.x web-scraping python-requests

我已经在python中创建了一个脚本,以使用凭据登录网页,然后从另一个链接中解析一条信息SIGN OUT(该脚本应该重定向到该链接),以确保我确实登录。

Website address

我尝试过:

import requests
from bs4 import BeautifulSoup

url = "https://member.angieslist.com/gateway/platform/v1/session/login"
link = "https://member.angieslist.com/"

payload = {"identifier":"usename","token":"password"}

with requests.Session() as s:
    s.post(url,json=payload,headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36",
        "Referer":"https://member.angieslist.com/member/login",
        "content-type":"application/json"
        })

    r = s.get(link,headers={"User-Agent":"Mozilla/5.0"},allow_redirects=True)
    soup = BeautifulSoup(r.text,"lxml")
    login_stat = soup.select_one("button[class*='menu-item--account']").text
    print(login_stat)

运行上面的脚本时,我得到AttributeError: 'NoneType' object has no attribute 'text'这个错误,这意味着我登录过程出错了,因为我要解析的信息SIGN OUT是静态内容。

如何从该网页解析此SIGN OUT信息?

1 个答案:

答案 0 :(得分:2)

此网站需要使用JavaScript。尽管您可以通过登录API正确生成登录令牌,但是当您转到主页时,它将进行多个其他API调用,然后更新页面。

因此问题与登录不起作用无关。您需要为此使用诸如硒之类的东西

from selenium import  webdriver

driver = webdriver.Chrome()

driver.get("https://member.angieslist.com/member/login")
driver.find_element_by_name("email").send_keys("none@getnada.com")
driver.find_element_by_name("password").send_keys("NUN@123456")
driver.find_element_by_id("login--login-button").click()
import time
time.sleep(3)
soup = BeautifulSoup(driver.page_source,"lxml")
login_stat = soup.select("[id*='menu-item']")

for item in login_stat:
    print(item.text)
print(login_stat)
driver.quit()

为了方便起见,我在这里混合了bs4selenium,但如果您愿意,也可以只使用selenium

Data