nasil yapabilirim yapmak istedigim siteden giden get ve post metotlarini bulmak sonra o metodlardan deger gondermek sonra gelen cevabi bulmak icin napmaliyim requests modulu var ama modulun kullanimi anlatan duzgun turkce kaynak yok
Eğer Python2 kullanıyorsanız, ilk başta Mechanize modülüne bir bakmanızı öneririm. Anlamanıza yardımcı olabilecek uzun bir video: https://www.youtube.com/watch?v=G6UzXhhWeDg
Eğer Python3 ile çalışıyorsanız benzerleri var ama yerini tutmadıkları için Requests kullanmanızı tavsiye ederim. Küçük bir örnek göstereyim,
Güzel bir paste sitesi olan dpaste post metodu ile veri gönderelim.
>>> import requests
>>>
>>> URL = "http://dpaste.com"
>>>
>>> postData = {"content": "CONTENT PARAMETRESININ ALDIGI DEGER"}
>>>
>>> r = requests.post(URL, data=postData)
>>> r.url
u'http://dpaste.com/1AY0ZQ7'
>>>
>>> for x in dir(r):
... print("[+] ", x)
...
[+] __attrs__
[+] __bool__
[+] __class__
[+] __delattr__
[+] __dict__
[+] __doc__
[+] __enter__
[+] __exit__
[+] __format__
[+] __getattribute__
[+] __getstate__
[+] __hash__
[+] __init__
[+] __iter__
[+] __module__
[+] __new__
[+] __nonzero__
[+] __reduce__
[+] __reduce_ex__
[+] __repr__
[+] __setattr__
[+] __setstate__
[+] __sizeof__
[+] __str__
[+] __subclasshook__
[+] __weakref__
[+] _content
[+] _content_consumed
[+] _next
[+] apparent_encoding
[+] close
[+] connection
[+] content
[+] cookies
[+] elapsed
[+] encoding
[+] headers
[+] history
[+] is_permanent_redirect
[+] is_redirect
[+] iter_content
[+] iter_lines
[+] json
[+] links
[+] next
[+] ok
[+] raise_for_status
[+] raw
[+] reason
[+] request
[+] status_code
[+] text
[+] url
Gördüğünüz üzere başarılı bir şekilde POST metodu ile siteye veri gönderdik, URL’yi kontrol edebilirsiniz
tam istedigim seyi anlatmadiniz benim istedigim siteden gisen sayfadki post ve get degerlerine ulasmak sizinki post ile giden verileri gormek
import mechanize
br = mechanize.Browser()
br.open('http://dpaste.com')
for form in br.forms():
print form
Python 2 ile birlikte Mechanize kullanırsanız, yapmak istediğiniz çok kolay… Sonuca bakalım,
<pasteform post http://dpaste.com/ application/x-www-form-urlencoded
<TextareaControl(content=
)>
<SelectControl(syntax=[as, ada, apacheconf, apl, applescript, awk, bash, console, bat, bbcode, c, csharp, cpp, clojure, cobol, coffee-script, cfm, common-lisp, css, d, dpatch, dart, sourceslist, delphi, diff, dtd, dylan, eiffel, erb, erlang, factor, fortran, Clipper, fsharp, genshi, go, groff, groovy, haml, haskell, html, html+django, html+php, ini, io, irc, java, js, js+django, js+php, js+erb, jsp, json, lasso, lighty, llvm, lua, make, mako, mathematica, matlab, modula2, trac-wiki, myghty, nginx, objective-c, ocaml, perl, perl6, php, *text, postscript, powershell, prolog, puppet, python, pytb, python3, py3tb, pycon, ragel, rst, rhtml, rb, rbcon, rust, sass, scala, scheme, scss, shell-session, smalltalk, smarty, sparql, sql, swift, tcl, tex, django, vb.net, xml, xslt, yaml])>
<TextControl(title=)>
<TextControl(poster=)>
<SelectControl(expiry_days=[1, *7, 30, 365])>
<SubmitControl(<None>=Paste it) (readonly)>>
benim istedigim giden degerleti gormek degil ulasmak diyelim sitedeki index.php?id=1 bu degere nasil ulasabilirim ama bu get degeriydi post metodu ylada nasil ulasirim
Bir önceki postumu iyi inceleyin…
python3 ile kastediyorum
benim anlatmak istedigim web sayfadindan giden get değerlerini gormek yani ne mesela wev sayfasi su www.xxxx.com/contact.php?id=2 buradaki id degeri name isim bu id yerine baska bir isim de olabilir bu get metodu icin
Yanlış anlamıyorsam, html kodları içerisinde bulunan özel bir yeri görmeye çalışıyorsunuz.
Mesela aşağıdaki örnekte olduğu gibi:
def bul(regex):
import requests
from bs4 import BeautifulSoup
import re
url = "http://www.imdb.com/list/ls050409147/"
r = requests.get(url=url)
soup = BeautifulSoup(markup=r.content, features="lxml")
for i in soup:
ara = re.findall(regex, str(i))
for j in ara:
print(j, end="\n\n")
bul(regex='<div>\n<a href=".+">\n<span class=".+">.+</span><br/>\n<span class=".+".+<br/>.+</span>\n</a>\n</div>')
Yukarıdaki kodlar, html sayfası içinde regex kalıbına uyan yazıları diğer yazılardan ayıklayıp ekrana bastırır:
[code]
1. sonuç:
# 2. sonuç: # 3. sonuç: # 4. sonuç: # 5. sonuç: # 6. sonuç: # 7. sonuç: # 8. sonuç: [/code]Bu 8 sonuç, oluşturduğumuz kalıba uyan sonuçlar. Ancak aradığımız şey daha da açık bir şekilde tanımlanırsa, o zaman eşleşen sonuçlar azaltılabilir.
[code]
Diyelim daha da açık hale getirilmiş regex kalıbını html kodları içerisinde arıyoruz
bul(regex=’
’)[/code]Bu kez ekrana bastırılan çıktı aşağıdaki olacaktır:
[code]
[/code]Buna benzer bir işlem mi yapmak istiyorsunuz acaba?
son ciktida bi get degerine ulastiniz bende onu istiyordum tesekkur ederim
peki bi post metodu olarak nasil veri gonderebilirim
Aslında mesajda verilmiş olan işlem siteye veri göndermiyor. Şayet yukarıdaki işleme benzer bir işlem yapmak istiyorsanız, o işleme ‘veri gönderme’ işlemi değil de ‘istek gönderme’ işlemi denmesi bence daha uygun. Çünkü elimizdeki somut bir veriyi siteye göndermiyoruz. Sadece sitenin html kodlarını görüntülemeyi talep ediyoruz.
Gelelim post() metoduyla siteye istek gönderme konusuna. Bir önceki mesajımdaki get() metodu yerine post() metodunu yazmanız o site için benzer çıktılar almanızı sağlayabilir. Ancak mesela url yerine https://forum.yazbel.com yazarsanız, get() metoduyla aldığınız çıktıyı post() metoduyla alamayabilirsiniz.
post() metodunu içeren aşağıdaki fonksiyonu çalıştıralım:
[code]
def kodları_gör(url):
import requests
from bs4 import BeautifulSoup
r = requests.post(url=url)
soup = BeautifulSoup(markup=r.content, features=“lxml”)
print(soup)
kodları_gör(url=“https://forum.yazbel.com”)[/code]
Yukarıdaki kodlar sayesinde aldığım çıktı aşağıdaki gibidir:
<html><body><p>["BAD CSRF"]</p></body></html>
Halbuki post() yerine get() fonksiyonunu kullanırsak:
def kodları_gör(url):
import requests
from bs4 import BeautifulSoup
r = requests.get(url=url)
soup = BeautifulSoup(markup=r.content, features="lxml")
print(soup)
kodları_gör(url="https://forum.yazbel.com")
Ekrana bastırılan çıktı aşağıdaki linkin içeriğindekiler gibi oluyor:
Bir önceki mesajımda verilen imdb linkinde ise hem get() hem de post() metoduyla aynı çıktıları elde edebiliyoruz.
Sizin yapmak istediğiniz işlem, post() fonksiyonuyla, get() yerine sadece post() yazarak yapılabilir. Ancak az önce gösterdiğim örnekte olduğu gibi bazen post() ile elde edeceğiniz çıktı get() ile elde edeceğiniz çıktı olmayabilir.
ilk istedigim gormekti peki simdi nasil veri gonderebilirim get ile halledilir ancak post ile nasil gonderirim post ile giden verileri yazidiginiz fonksiyonla gorduk nasil veri gondeririz donen responseun iciregine nasil bakariz
Çok özür dilerim ama kullandığınız ifade biçimi ile anlatmak istediğinizin pek anlaşılır olmadıklarını düşünüyorum. Siz tam olarak ne türde bir veri göndermek istiyorsunuz? Ayrıca bir yandan sanıyorum bilgim dışındaki bir alan hakkında sorular soruyorsunuz.
http metodlari get post kullanicindan alinan veriyi gonderme metodlari
neyse her sey icin thx.