我是网络清理的新手,我想学习如何正确而礼貌地进行。我的问题类似于this。
'因此,我正在尝试使用python和请求登录并导航至页面。我很确定自己已经登录,但是一旦我尝试导航到该页面,那么从该页面打印的HTML就会指出您必须先登录才能看到该页面。'
我已经检查过要抓取的网站的robots.txt。有什么东西可以防止我刮擦吗? 用户代理: * 不允许:/缓存/ 禁止:/ admin3003 / 禁止:/ admin5573 / 禁止:/ members / 禁止:/ pp / 禁止:/ subdomains / 禁止:/ tags / 禁止:/ templates / 禁止:/ bin / 禁止:/ emails /
我的代码以及上面链接提供的解决方案对我不起作用:
import requests
from bs4 import BeautifulSoup
login_page = <login url>
link = <required url>
payload = {
“username” = <some username>,
“password” = <some password>
}
p = requests.post(login_page, data=payload)
cookies = p.cookies
page_response = requests.get(link, cookies=cookies)
page_content = BeautifulSoup(page_response.content, "html.parser")
RequestsCookieJar显示用于WEBSITE的Cookie ASP.NET_SessionId = 1adqylnfxbqf5n45p0ooy345(使用p.cookies命令)
p.status_code的输出:200
更新:
s = requests.session()
不能解决我的问题。在开始研究cookie之前,我已经尝试过了。
更新2: 我正在尝试从特定网站收集新闻。首先,我用搜索词过滤了新闻,并通过python请求+ beautifulsoup在首页上显示了已保存的链接。现在,我想浏览链接并从中提取新闻。全文只能通过凭据查看。没有特殊的登录窗口,可以通过任何页面登录。有一个登录按钮,当将鼠标移到该按钮时,将出现一个登录窗口,如所附图像所示。我尝试通过主页和我要从中提取文本的页面登录(不是同时进行,而是在不同的试验中进行)。这些都不起作用。 我还尝试通过搜索“ csrf_token”,“ authentication_token”,“ csrfmiddlewaretoken”,:csrf”,“ auth”来找到csrf令牌。在网页上的html中找不到任何内容。Image
答案 0 :(得分:0)
您可以使用request.Session()保持登录状态,但是必须将登录的cookie保存为json文件。下面的示例显示了一个剪贴代码,用于将登录会话以json格式保存为Facebook中的cookie;
import selenium
import mechanicalsoup
import json
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import requests
import time
s = requests.Session()
email = raw_input("Enter your facebook login username/email: ")
password = raw_input("Enter your facebook password: ")
def get_driver():
driver = webdriver.Chrome(executable_path = 'your_path_to_chrome_driver')
driver.wait = WebDriverWait(driver, 3)
return driver
def get_url_cookie(driver):
dirver.get('https://facebook.com')
dirver.find_element_by_name('email').send_keys(email)
driver.find_element_by_name('pass').send_keys(password)
driver.find_element_by_id('loginbutton').click()
cookies_list= driver.get_cookies()
script = open('facebook_cookie.json','w')
json.dump(cookies_list,script)
driver = get_driver()
get_url_cookie(driver)
上面的代码使用driver.get_cookies()获取登录会话cookie,并将其保存为json文件。要使用Cookie,只需使用;
with open('facebook_cookie.json') as c:
load = json.load(c)
for cookie in load:
s.cookie.set(cookie['name'],cookie['value'])
url = 'facebook.com/the_url_you_want_to_visit_on_facebook'
browser= mechanicalsoup.StatefulBrowser(session=s)
browser.open(url)
您会加载会话...