Python internetle aktiflestirmek

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 :slight_smile:

1 Beğeni

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ç:

Amazon Video
Watch Movies &
TV Online
# 2. sonuç:
Prime Video
Unlimited Streaming
of Movies & TV
# 3. sonuç:
Amazon Germany
Buy Movies on
DVD & Blu-ray
# 4. sonuç:
Amazon Italy
Buy Movies on
DVD & Blu-ray
# 5. sonuç:
Amazon France
Buy Movies on
DVD & Blu-ray
# 6. sonuç:
Amazon India
Buy Movie and
TV Show DVDs
# 7. sonuç:
DPReview
Digital
Photography
# 8. sonuç:
Audible
Download
Audio Books
[/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=’

\n\nAmazon France
\n<span class=".+".+
.+\n
\n
’)[/code]

Bu kez ekrana bastırılan çıktı aşağıdaki olacaktır:

[code]

Amazon France
Buy Movies on
DVD & Blu-ray
[/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.