(对不起,我会努力做到最好):

我是python的新手,我正在寻求某些网络抓取的帮助。我已经有一个可用的代码来获取我想要的链接,但是该网站受密码保护。
在阅读大量问题的帮助下,我在登录后设法获得了可运行的代码来刮擦网站,但我想要的链接在另一页上:

登录页面为http://fantasy.trashtalk.co/login.php

登录后的登录页面(我用此代码抓取的页面)为http://fantasy.trashtalk.co/

我想要的页面是http://fantasy.trashtalk.co/?tpl=classement&t=1

所以我有这段代码(某些导入可能是无用的,它们来自另一个代码):

from bs4 import BeautifulSoup
import requests
from lxml import html
import urllib.request
import re

username = 'myusername'
password = 'mypass'
url = "http://fantasy.trashtalk.co/?tpl=classement&t=1"
log = "http://fantasy.trashtalk.co/login.php"

values = {'email': username,
          'password': password}

r = requests.post(log, data=values)

# Not sure about the code below but it works.
data = r.text

soup = BeautifulSoup(data, 'lxml')

tags = soup.find_all('a')

for link in soup.findAll('a', attrs={'href': re.compile("^https://")}):
    print(link.get('href'))


我知道这段代码仅允许我访问登录页面,然后刮取接下来的内容(登录页面),但是我不知道如何“保存”我的登录信息以访问要刮取的页面。

我想我应该在登录代码后添加类似这样的内容,但是当我这样做时,它只会从登录页面抓取我的链接:

s = request.get(url)


我也用“ with session”来阅读一些话题吗?但是我没有设法使它起作用。

任何帮助将不胜感激。感谢您的时间。

最佳答案

问题是您需要通过通过会话对象而非请求对象发布登录凭据来保存登录凭据。我已经在下面修改了您的代码,现在您可以访问scrape_url页面中的html标签。祝好运!

import requests
from bs4 import BeautifulSoup

username = 'email'
password = 'password'
scrape_url = 'http://fantasy.trashtalk.co/?tpl=classement&t=1'

login_url = 'http://fantasy.trashtalk.co/login.php'
login_info = {'email': username,'password': password}

#Start session.
session = requests.session()

#Login using your authentication information.
session.post(url=login_url, data=login_info)

#Request page you want to scrape.
url = session.get(url=scrape_url)

soup = BeautifulSoup(url.content, 'html.parser')

for link in soup.findAll('a'):
    print('\nLink href: ' + link['href'])
    print('Link text: ' + link.text)

07-24 21:46