Страница отзыва не откладывается после POST_DATA - Beautiful Soup & Python


3 принят
+50

Совершенно очевидно, что вы делаете.

1) You are posting some data to a URL
2) Scrapping the same URL.
3) Check for some "String"

Но что вы должны делать.

1) Post data to a URL
2) Scrap the resultant page (Not the same URL) and store in the file
3) Check for some "String"

Для этого вам нужно записать r.content в локальный файл и выполнить поиск строки

Измените код следующим образом:

 payload = {'txtSearch':'HELLOWORLD'}
 url2 = urllib.parse.urljoin(url_for_parse,action_value)
 r = requests.post(url2, auth = {"USERNAME", "PASSWORD"}, payload)

  with open("results.html", "w") as f:
        f.write(str(r.content))

//Then continue searching for a String. 

Примечание. Вам необходимо отправить полезную нагрузку на url2, а не на исходный URL (url_for_parse)


0

Ответ, который возвращается после вызова request.post, будет HTML, который вы хотите пройти. Вы можете получить к нему доступ, выполнив

r.content

Однако, с моим испытанием на это, он сказал, что я не аутентифицирован, поэтому я предполагаю, что вы прошли проверку подлинности?

Я бы также рекомендовал использовать запросы полностью вместо использования urllib для GET и запросов для POST.


0

Может быть хорошей идеей сохранить ваши параметры сеанса во всех ваших запросах.

http://docs.python-requests.org/en/master/user/advanced/#session-objects

import requests

proxies = {
    "http": "",
    "https": "",
}

headers = {
        'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}

data = {'item':'content'}
## not that you need basic auth but its simple to toss in requests
auth = requests.auth.HTTPBasicAuth('fake@example.com', 'not_a_real_password') 
s = requests.session()
s.headers.update(headers)
s.proxies.update(proxies)
response = s.post(url=url, data=data, auth=auth)

этот ключевой бит действительно то, что вы вызываете, а затем ожидаете

<form name="cmt" method="post" action="comment.aspx">

это просто сообщение на http://demo.testfire.net/comment.aspx

питон, HTML, веб-соскоб, BeautifulSoup,

python,html,web-scraping,beautifulsoup,

2

Ответов: 3


3 принят
+50

Совершенно очевидно, что вы делаете.

1) You are posting some data to a URL
2) Scrapping the same URL.
3) Check for some "String"

Но что вы должны делать.

1) Post data to a URL
2) Scrap the resultant page (Not the same URL) and store in the file
3) Check for some "String"

Для этого вам нужно записать r.content в локальный файл и выполнить поиск строки

Измените код следующим образом:

 payload = {'txtSearch':'HELLOWORLD'}
 url2 = urllib.parse.urljoin(url_for_parse,action_value)
 r = requests.post(url2, auth = {"USERNAME", "PASSWORD"}, payload)

  with open("results.html", "w") as f:
        f.write(str(r.content))

//Then continue searching for a String. 

Примечание. Вам необходимо отправить полезную нагрузку на url2, а не на исходный URL (url_for_parse)


0

Ответ, который возвращается после вызова request.post, будет HTML, который вы хотите пройти. Вы можете получить к нему доступ, выполнив

r.content

Однако, с моим испытанием на это, он сказал, что я не аутентифицирован, поэтому я предполагаю, что вы прошли проверку подлинности?

Я бы также рекомендовал использовать запросы полностью вместо использования urllib для GET и запросов для POST.


0

Может быть хорошей идеей сохранить ваши параметры сеанса во всех ваших запросах.

http://docs.python-requests.org/en/master/user/advanced/#session-objects

import requests

proxies = {
    "http": "",
    "https": "",
}

headers = {
        'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}

data = {'item':'content'}
## not that you need basic auth but its simple to toss in requests
auth = requests.auth.HTTPBasicAuth('fake@example.com', 'not_a_real_password') 
s = requests.session()
s.headers.update(headers)
s.proxies.update(proxies)
response = s.post(url=url, data=data, auth=auth)

этот ключевой бит действительно то, что вы вызываете, а затем ожидаете

<form name="cmt" method="post" action="comment.aspx">

это просто сообщение на http://demo.testfire.net/comment.aspx

питон, HTML, веб-соскоб, BeautifulSoup,
Похожие вопросы