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.