我每天从Packt Publishing获得一本免费电子书,其中包括“免费学习 - 免费技术电子书”促销。我正在尝试自动化这个过程。我根据他们的根路径登录进行登录,之后我在促销URL上进行了GET并使用BeautifulSoup 4来获取“声明你的免费电子书”链接的HREF,现在我被卡住了。这是代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
USERNAME = 'email@email.com'
PASSWORD = 'secret'
BASE_URL = 'https://www.packtpub.com'
PROMO_URL = 'https://www.packtpub.com/packt/offers/free-learning'
session = requests.session()
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
session.post(BASE_URL, {"username": USERNAME, "password": PASSWORD}, headers=headers)
response = session.get(PROMO_URL, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
current_offer_href = BASE_URL + soup.find("div", {"class": "free-ebook"}).a['href']
print(current_offer_href)
print(session.post(current_offer_href, headers=headers))
current_offer_href
保持正确的价值,如果你今天去了网站(8 / NOV / 2016)并检查你会发现的按钮:
在这种情况下,我的current_offer_href
持有https://www.packtpub.com/freelearning-claim/21558/21478
。
如果我在代码中尝试对current_offer_href
进行POST,则会收到<Response [404]>
。实际上我应该得到的是重定向到https://www.packtpub.com/account/my-ebooks
,因为如果我在网站上手动点击按钮会发生这种情况。这有什么不对?
答案 0 :(得分:0)
您是基于您的用户代理的过滤服务器端。解决问题更改用户代理。