Нет необходимости использовать Selenium, поскольку данные возвращаются requests.get()
.Но, к сожалению, не возвращается как application/json
, а скорее text/html;charset=ISO-8859-1
.
Однако данные отправляются в структуре json, поэтому необходимо манипулировать строкой, чтобы иметь возможность читать ее, используя json
.Затем вы можете записать это в таблицу, чтобы получить данные.
Затем, чтобы получить pdf, просто нужно перебрать те ссылки, которые вы получаете с этим, и записать на диск:
import requests
import json
from pandas.io.json import json_normalize
import bs4
base_url = 'https://www.nseindia.com'
url = 'https://www.nseindia.com/corporates/directLink/latestAnnouncementsCorpHome.jsp'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
response = requests.get(url, headers=headers)
jsonStr = response.text.strip()
keys_needing_quotes = ['company:','date:','desc:','link:','symbol:']
for key in keys_needing_quotes:
jsonStr = jsonStr.replace(key, '"%s":' %(key[:-1]))
data = json.loads(jsonStr)
data = data['rows']
# puts the data into dataframe
df = json_normalize(data)
links = [ base_url + ele['link'] for ele in data ]
for link in links:
response = requests.get(link, headers=headers)
soup = bs4.BeautifulSoup(response.text, 'html.parser')
try:
pdf_file = base_url + soup.find_all('a', href=True)[0]['href']
except:
print ('PDF not found')
path = 'C:/path/to/file/'
filename = path + pdf_file.split('/')[-1]
response = requests.get(pdf_file)
with open(filename, 'wb') as f:
f.write(response.content)
Вывод:
Вот как выглядит фрейм данных.PDF-файлы будут записаны там, где вы захотите их разместить.Обратите внимание, что некоторые из них - это zip-файлы, содержащие pdf.Я не стал их разархивировать, хотя вы могли бы добавить это как дополнительный шаг перед записью (т.е. sudo, если файл представляет собой zip-архив, распакуйте его, чтобы получить pdf, затем запишите на диск. Если файл pdf, просто напишите вдиск.)
print (df)
company ... symbol
0 RELIANCE CAPITAL LIMITED ... RELCAPITAL
1 RELIANCE INFRASTRUCTURE LIMITED ... RELINFRA
2 GRAND FOUNDRY LIMITED ... GRANDFONRY
3 VRL LOGISTICS LIMITED ... VRLLOG
4 GRAND FOUNDRY LIMITED ... GRANDFONRY
5 EUROTEX INDUSTRIES AND EXPORTS LIMITED ... EUROTEXIND
6 PSP PROJECTS LIMITED ... PSPPROJECT
7 VRL LOGISTICS LIMITED ... VRLLOG
8 THE UGAR SUGAR WORKS LIMITED ... UGARSUGAR
9 ZUARI GLOBAL LIMITED ... ZUARIGLOB
10 VRL LOGISTICS LIMITED ... VRLLOG
11 RUPA & COMPANY LIMITED ... RUPA
12 ANIK INDUSTRIES LIMITED ... ANIKINDS
13 ARROW GREENTECH LIMITED ... ARROWGREEN
14 CENTURY PLYBOARDS (INDIA) LIMITED ... CENTURYPLY
15 TARA JEWELS LIMITED ... TARAJEWELS
16 INDO COUNT INDUSTRIES LIMITED ... ICIL
17 LUMAX AUTO TECHNOLOGIES LIMITED ... LUMAXTECH
18 BLISS GVS PHARMA LIMITED ... BLISSGVS
19 EUROTEX INDUSTRIES AND EXPORTS LIMITED ... EUROTEXIND
[20 rows x 5 columns]