PDA

Просмотр полной версии : Проверка сайта на возможность к парсингу через requests.


pomidorq
22.10.2021, 00:23
Скорее всего эта штука никому и нужна не будет, но, у меня возникали проблемы с парсингом через requests, решил сделать простой гайд на проверку использования сайтом капчи.

Просто некоторые сайты используют блокировку подобных запросов, и с первого взгляда хер поймёшь, тот ли там HTML или нет.


Python:






import
requests
import
fake_headers
,
fake_useragent
class
Browser
(
)
:
def
__init__
(
self
)
:
pass
@classmethod
def
gethtml
(
cls
,
url
)
:
"""Write parsed html"""
with
open
(
'index.html'
,
'w'
,
encoding
=
'utf-8'
)
as
file
:
file
.
write
(
str
(
cls
.
request
(
url
)
.
text
)
)
@staticmethod
def
request
(
url
)
:
"""Making fake information"""
fake_header
=
fake_headers
.
Headers
(
browser
=
'chrome'
,
os
=
'win'
,
headers
=
True
)
.
generate
(
)
fake_header
[
'User-Agent'
]
=
fake_useragent
.
UserAgent
(
)
[
'google chrome'
]
"""Make main requests"""
try
:
content
=
requests
.
get
(
'{0}'
.
format
(
url
)
,
headers
=
fake_header
)
if
content
.
status_code
==
200
:
return
content
else
:
return
-
1
except
requests
.
exceptions
.
ConnectionError
:
return
-
1
if
__name__
==
'__main__'
:
browser
=
Browser
(
)
browser
.
gethtml
(
'https://www.blast.hk/threads/105426/'
)




Технология следующая:

1) Передаём ссылку в метод gethtml

2) Открываем появившийся в директории со скриптом файл index.html

Как понять?:

2) Если страница загружается, но на ней не те объекты - парсинг через requestsневозможен

https://forum.antichat.xyz/attachments/27867802/img_58c1377b64.png

3) Если на странице видите число -1, то на ссылку зайти вообще не вышло.

https://forum.antichat.xyz/attachments/27867802/img_93a7aa999e.png

3)Если страница подгружает только HTML маркировку, без CSS - парсингу это никак не помешает, возможно.

https://forum.antichat.xyz/attachments/27867802/img_b8737c3dbf.png

4) Если страница загружается полностью со всеми стилями - преград для парсинга вообще нет.


https://forum.antichat.xyz/attachments/27867802/img_5b7608f814.png


*** Если страница долго грузится, то зайдите в html код, скорее всего там всё есть. Но для достоверности лучше подождать пока она загрузится.

MrCreepTon
22.10.2021, 00:32
А что за модули fake_headers и fake_useragent? Ты о них не сказал в теме, да и мне кажется можно обойтись без них, просто вписать headers в реквест сразу (User-Agent, куки и бла-бла-бла)

pomidorq
22.10.2021, 00:56
А что за модули fake_headers и fake_useragent? Ты о них не сказал в теме, да и мне кажется можно обойтись без них, просто вписать headers в реквест сразу (User-Agent, куки и бла-бла-бла)


Ты конечно прав, но желательно делая сиксилион запросов указывать разные хэдэры. Я вообще этот класс хотел сделать для своего парсера, поэтому там есть эти либы.

Кому нужно без сторонних либ:




Python:






import
requests
class
Browser
(
)
:
def
__init__
(
self
)
:
pass
@classmethod
def
gethtml
(
cls
,
url
)
:
"""Write parsed html"""
with
open
(
'index.html'
,
'w'
,
encoding
=
'utf-8'
)
as
file
:
file
.
write
(
str
(
cls
.
request
(
url
)
.
text
)
)
@staticmethod
def
request
(
url
)
:
"""Make main requests"""
try
:
content
=
requests
.
get
(
'{0}'
.
format
(
url
)
)
if
content
.
status_code
==
200
:
return
content
else
:
return
-
1
except
requests
.
exceptions
.
ConnectionError
:
return
-
1
if
__name__
==
'__main__'
:
browser
=
Browser
(
)
browser
.
gethtml
(
'https://www.blast.hk'
)

манку хлебал
22.10.2021, 01:25
это же просто проверка на то, ответил ли сервер статусом 200

как оно связано с капчей?

Rei
22.10.2021, 01:31
сайты "не поддающиеся парсингу" скорее всего содержат джаваскрипт хрень, которую requests не в состоянии переварить. ты какой-то ерундой занимаешься, хз зачем твой инструмент нужен вообще



это же просто проверка на то, ответил ли сервер статусом 200
как оно связано с капчей?


видимо, проверка на редирект, лол

pomidorq
22.10.2021, 11:11
сайты "не поддающиеся парсингу" скорее всего содержат джаваскрипт хрень, которую requests не в состоянии переварить.


Можно было просто вот так написать, я ж написал что оно может не пригодиться, а ты решил свои пять копеек вставить) При чем тут джаваскрипт когда на сайтах по типу яндекса в html есть контейнеры

captcha при парсе?



это же просто проверка на то, ответил ли сервер статусом 200
как оно связано с капчей?


А много сайтов отвечают с другим статусом?) я вот просто не понимаю когда я чётко расписываю цель, а потом вижу вот это

HackerARZ1
22.10.2021, 15:20
Сделай так, чтобы после парса открылась страница в selenium, ту которую ты спарсил.

pomidorq
22.10.2021, 18:51
Сделай так, чтобы после парса открылась страница в selenium, ту которую ты спарсил.


Зачем?

laiser
26.10.2021, 13:30
Зачем?


Хах, мне тоже стало интересно. Зачем после открывать в селениуме? 😀

Если можно просто открыть в селениуме без всего, что написал ТС