Я использую BeautifulSoup, как я могу получить ссылку после перенаправления?

Объекты в Python могут иметь атрибуты (фактически, каждый объект имеет встроенные атрибуты - атрибуты данных и методы (функции - это значения, т. е. объекты), чтобы работать с ними). ​​

Например у вас есть объект person, который имеет несколько атрибутов: name, gender и т. д.

Доступ к этим атрибутам (будь то методы или объекты данных) обычно записывается: person.name, person.gender, person.the_method() и т. д.

Но что, если вы не знаете имя атрибута в момент написания программы? Например, у вас есть имя атрибута, хранящееся в переменной под названием attr_name.

, если

attr_name = 'gender'

, вместо записи

gender = person.gender

вы можете write

gender = getattr(person, attr_name)

Некоторая практика:

Python 3.4.0 (default, Apr 11 2014, 13:05:11)

>>> class Person():
...     name = 'Victor'
...     def say(self, what):
...         print(self.name, what)
... 
>>> getattr(Person, 'name')
'Victor'
>>> attr_name = 'name'
>>> person = Person()
>>> getattr(person, attr_name)
'Victor'
>>> getattr(person, 'say')('Hello')
Victor Hello

getattr поднимет AttributeError, если атрибут с заданным именем не существует в object:

>>> getattr(person, 'age')
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'Person' object has no attribute 'age'

Но вы можете передать значение по умолчанию в качестве третьего аргумента, которое будет возвращено, если такой атрибут не существует:

>>> getattr(person, 'age', 0)
0

Вы можете использовать getattr вместе с dir для повторения всех имен атрибутов и получения их значений:

>>> dir(1000)
['__abs__', '__add__', ..., '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

>>> obj = 1000
>>> for attr_name in dir(obj):
...     attr_value = getattr(obj, attr_name)
...     print(attr_name, attr_value, callable(attr_value))
... 
__abs__  True
...
bit_length  True
...

>>> getattr(1000, 'bit_length')()
10

Практическое использование для этого было бы найти все методы, имена которых начинаются с test и вызывают их .

Как и в getattr , имеется setattr , что позволяет вам установить атрибут объекта, имеющего его имя:

>>> setattr(person, 'name', 'Andrew')
>>> person.name  # accessing instance attribute
'Andrew'
>>> Person.name  # accessing class attribute
'Victor'
>>>

2
задан hello123 16 January 2019 в 07:34
поделиться

1 ответ

Этот веб-сайт проверяет, установлен ли реферер при перенаправлении. Вы можете просто указать исходный URL в качестве реферера в заголовке и легко обойти это. Вы также можете видеть, что referer используется в качестве параметра url в окончательной ссылке для скачивания.

import requests
from bs4 import BeautifulSoup
s = requests.Session()
url='https://scanlibs.com/neural-networks-systems-evolutionary-algorithms-2nd/'
r=html=s.get(url).text
soup=BeautifulSoup(html,'html.parser')
relative_link=soup.find('a',{'id':'download'})['href'] #get the relative link
download_redirect_link=url+relative_link
headers={
"referer": url
}
r2=requests.get(download_redirect_link,headers=headers)
print(r2.url) 

Выход

https://rapidgator.net/file/80e881f7631eddb49de31e5718eb96ba?referer=https://scanlibs.com/neural-networks-systems-evolutionary-algorithms-2nd/
0
ответ дан Bitto Bennichan 16 January 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: