Bir yazıdan değerleri çekmek

tekrardan merhaba
elimde bir yazı var ve ben bu yazıdan bazı verileri çekmek istiyorum.- yaklaşık 15 bin tane “12313123” gibi sayı-
bunu nasıl yaparım?

veriye ulaşıyorum.
ama içinde her /asdasd/123123123 gibi a href varsa 1231231 çekmek istiyorum nasıl yapabilirim?
sayfanın statik kodlarına ulaştım da binlerce satır açamıyorum notepad ile falan
yani python ile açarken sıkıntı çıkar mı nasıl açarım nasıl o 12313 sayılarını ekleyebilirim

yapılacak şey basit
kaynaktaki her /asdasd/ sonrasındaki 11 rakamı bir listeye ekle.
nasıl yaparım

Buyur:

href = "asdfg/12341234"

for i in href.split("/"):
	if i.isdigit():
		print(i)
1 Beğeni

regex yani düzenli ifadeler denilen yapıyı kullanabilirsiniz. Biraz karışıktır ancak, çok kısa ifadelerle istediğinizi elde edebilirsiniz. Örneğin sizin ifadeniz için bir “a href” yazalım

impor re

link = "<a href = '/asdasd/123231123'>Link</a>"
ifade = "<a href = '.+/([0-9]+)'>.+</a>"
sonuc = re.search(ifade,link)

print("Bulunan sonuc: {}".format(sonuc.group(1)))

sonuc

Bulunan sonuc: 123231123
2 Beğeni

arkadaşlar verdiğiniz şeyi denedim olmadı hata verdi
benim elimdeki yazı çok büyük
onbinlerce satır sanırsam python açmıyor. I/O error veriyor yada başka bir hata veriyor.
nasıl düzeltebilirim
ya arkadaşlar elimde bir dosya var dosyayı açamıyorum python ile
bende internetten çekiyorum o zamanda işlemiyor.
yardım edebilecek var mı özelden?

Python’ın dosyayı açmaması diye bir şey olamaz. Tam olarak nasıl bir hata alıyorsunuz? Dosyayı açmak için yazdığınız kodlar neler?

1 Beğeni

Microsoft Windows [Version 10.0.17134.345]
(c) 2018 Microsoft Corporation. Tüm hakları saklıdır.

C:\Users\emre>py
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:05:16) [MSC v.1915 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.

dosya = open(r"C:\Users\emre\Desktop\abc.html")
import re
ifade = “.+
sonuc = re.search(dosya,ifade)

Traceback (most recent call last):
File “”, line 1, in
File “C:\Users\emre\AppData\Local\Programs\Python\Python37-32\lib\re.py”, line 183, in search
return _compile(pattern, flags).search(string)
File “C:\Users\emre\AppData\Local\Programs\Python\Python37-32\lib\re.py”, line 285, in _compile
raise TypeError(“first argument must be string or compiled pattern”)
TypeError: first argument must be string or compiled pattern
for i in dosya.split(“/”):
… if i.isdigit():
… print(i)

Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘split’

bu arada ifade a href vardı yansımıyor ama
şöyleydi:
< a href = ‘.+/([0-9]+)’>.+

Dosyayı string olarak okuması için open()'ın sonuna read() koy.

dosya = open(r"C:\Users\emre\Desktop\abc.html").read()

Burasi hatalı.

sonuc = re.search(dosya,ifade)

Önce ifade sonra dosya olacak

sonuc = re.search(ifade,dosya)

html sayfasında tam olarak ne yazdığını görmeden ifade tahmini yapmak kolay değil.

Eğer href="asdasd/1234566" gibi bir şey ise şöyle bir şey deneyebilirsin.

import re
dosya = open(r"C:\Users\emre\Desktop\abc.html").read()
sonuc = re.findall('href=".*?(\d+)',dosya)
for i in sonuc:
    print(i)
2 Beğeni

Microsoft Windows [Version 10.0.17134.345]
(c) 2018 Microsoft Corporation. Tüm hakları saklıdır.
C:\Users\emre>py
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:05:16) [MSC v.1915 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.

dosya = open(r"C:\Users\emre\Desktop\abc.html").read()

Traceback (most recent call last):
File “”, line 1, in
File “C:\Users\emre\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1254.py”, line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: ‘charmap’ codec can’t decode byte 0x9e in position 1310687: character maps to

amaç : http://www.incisozluk.com.tr/u/crossfire/son-entry/
şuradaki entry değerlerini çekmek kaynak koddaki /e/ değerleri
ama java script ile gidiyor ve ben bi burp ile araya girdiğimde tüm yazıların değerlerini kaynak kodda ulaşabiliyorum.
ama python’da beceremediğim için bende dosyayı kaydettim. yani aslında o sayfanın kaynak kodu lazım ama aşağı inildikçe normalde js ile geliyor bilgiler. burp ile değer değiştirirsem tüm yazılar geliyor.
ben bu şekilde yazdığım her yazının değerine ulaşmak istiyorum.
silme kısmını hallettim sağolun o kısımda yardım ettiniz.
şimdi her bir değeri ulaşmam lazım bu sayede entry silici script elimde olacak.
saygılar

Python 3 kullanıyorsan dosyayı şöyle okumayı dene;

with open(r"C:\Users\emre\Desktop\abc.html", encoding='utf-8') as f:
    dosya = f.read()
1 Beğeni

dediğini yaptım oldu
teşekkürler peki ben burada ne yapsam çıktıdan sadece 9 tane rakam yanyana bulunanları bir dosyaya alt alta kaydedebilirim?

9 tane rakam yan yana derken sadece 8 basamakli rakamları mı alsın diyorsun? Tam olarak anlayamadım.

Bir örnek ile anlatırsan daha iyi olur.

1 Beğeni

202897287
202901378
gibi olanları yani kaç basamaklı 9 basamaklı sayıları seçsin bir yere kaydetsin.
ama aynı değerden defalarca var. bu yüzden bir kere varsa eklemesin o dosyaya.
nasıl yapabilirim?

sonuc = ['1234','123456','1234567','123456789','987654321','123456789']
# bu aldığımız sonuç olsun, burada farklı basamaklı sayılar ve aynı basamaklı üc tane sayı var ama iki tanesi aynı (123456789)
istenilen = ''
for i in sonuc:
    if len(i) == 9 and i not in istenilen:
        istenilen += i+'\n'
print(istenilen)
1 Beğeni

Küme kullanın. Kümelere bir değeri defalarca ekleseniz de sadece bir tanesi var olacaktır.

2 Beğeni

hallettim çok teşekkür ederim sayenizde haftalarca uğraşacağım işi 20 satırlık kodla hallettim.
teşekkür ederim :slight_smile:

Microsoft Windows [Version 10.0.17134.345]
(c) 2018 Microsoft Corporation. Tüm hakları saklıdır.

import requests
import re
oturum = “xxxxxxxxxxxxxxxx”
with open(r"C:\Users\emre\Desktop\emre.html", encoding=‘utf-8’) as f:
… dosya = f.read()

sonuc = re.findall(‘href=".*?(\d+)’,dosya)
küme = set()
for i in sonuc:
… if len(i) == 9:
… küme.add(i)

for s in küme:
… r2 = requests.post(“http://incisozluk.com.tr/ax/?a=yenig&na=entry&na2=sil”, data={“entry_id”:s}, cookies={“PHPSESSID”:oturum})

3 Beğeni