ftp
3 سال پیش توسط ftp مطرح شد
13 پاسخ

web scraping with python

@websaz
@mohaligateway
@samanzdev
@rezajahangir
@Rp76
@juza66
من میخوام در یک سایت لاگین کنم اما نمیدونم چطوری در پایتون با کتابخانه Beautiful Soup
بگم که روی button کلیک کن
میشه راهنمایی کنید به چه شکلی میشه


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
-3

من پایتون بلد نیستم
c# میتونم اینکارو کنم + php


عرفان
تخصص : Python
@erf 3 سال پیش مطرح شد
-1

سلام
از کتابخانه selenium استفاده کنید


ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@ErfanSadeqiNejad
من با این گنتبخانه میخوام انجام بدم
Beautiful Soup و requests


عرفان
تخصص : Python
@erf 3 سال پیش مطرح شد
[N] ONE
تخصص : هرچی باشه
@none 3 سال پیش آپدیت شد
0

اول باید ببینید API سایت چطور کار میکنه و به چه چیزی نیاز دارید
اگر captcha داره باید ببینید راهی برای bypass هست یا نه!
صفحه وب داینامیک هست یا استاتیک!
بعد از این موارد میتوانید ببینید که از چه نوع متود request ی استفاده کنید راحت تر هستید و انجام شدنی ه!
حال از BeautifulSoup میتونید به شکل زیر استفاده کنید:

URL = 'https://www.test.test/jobs/search/?user=test&password=xxxx'
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')

نمونه کد بالا HTTP Request با متود Get هستش

login_url = 'http://test.test/login'
data = {
    'username': 'your_username',
    'password': 'your_password'
}

with requests.Session() as s:
    response = requests.post(login_url , data)
    print(response.text)
    index_page= s.get('http://test.test')
    soup = BeautifulSoup(index_page.text, 'html.parser')
    print(soup.title)

و این نمونه کد نیز برای متود post

ولی چیزی که شما سوال دارید مغایر با موارد بالاس
شما باید از headless web browser ها استفاده کنید تا کاری که میخواید رو انجام بدید
اگر میخواهید با پایتون account checker بسازید میتونم نمونه زیر رو بهتون پیشنهاد بدم که با requests پیاده سازی شده
Simple Checker By Python
*همینطور اگر هدفتون دریافت یه سری اطلاعات باشه هم از این روش میتونید ساتفاده کنید!


ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@none
راستیتش من میخوام این صفحه رو لاگین کنم
https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/
میشه راهنمایی کنید


[N] ONE
تخصص : هرچی باشه
@none 3 سال پیش آپدیت شد
0

@ftp
توی این سایت لاگین به صورت دو مرحله ای صورت میگیره
اول شماره یا نام کاربری وارد میشه:
url:https://www.digikala.com/users/login-register
method:post
data:
rc:randomstringinform
rd:randomstringinform
yourusername:login[emailphone]

بعد این مرحله به صفحه ای redirect میشی با url:
https://www.digikala.com/users/login/confirm/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Ijk4OTM4MjEzNzIzNyJ9.P76oezeSbzwNahjQAFofUkx4ceDT48aXU8Q9PoLu0&type=loginbypassword&back=https://www.digikala.com/
که token هر دفعه تغییر میکنه پس باید این url رو دریافت کنی بعد باید با متود post اطلاعات زیر رو براش بفرستی:
rc:tokenfromform
rd:tokenfromform
login[password]:yourpassword

توضیحات:
rc و rd دو ورودی پنهان در form هستن که باید ارسال بشن و توی هر مرحله متفاوت ان!
برای انجامش اول باید یه صفحه برای login باز کنی و بعد rdوrc رو بگیری ازش و user مورد نظر رو هم وارد کنی و بفرستی url اول بعد url دوم و پارامتر های rcوrd بگیری بفرستی url دوم!(هر دو متود post)
تمام!
نیازی به headless web browser نیست
با دو تا curl و post request تمومه لاگین شدن!

ساده است و خوشبختانه captcha نداره 😏

یه چندبار با postman امتحان کن دستت میاد بعد برو توی پایتون پیاده اش کن


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
0

بهترین پاسخ رو @none دادند ...


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
0

@ErfanSadeqiNejad
@none
چند تا نکته
۱- چطوری خودش میره به صفحه پسورد ؟
۲- توکن که هر دفعه تغییر میکنه رو چطوری باید گرفت؟
من از این کد ایتفاده کردم برای صفحه اول اما به صفحه دوم نمیره

from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"n@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params,headers={"Referer":"https://digikala.com/"})
soup=BeautifulSoup(req1.content,"html.parser")
res=soup.find_all(attrs={"name":["rc","rd"]})
res1=soup.find('button',class_=['o-btn o-btn--contained-red-lg c-login__form-action'])
num=[]
for each in res:
print(each['value'])
num.append(each['value'])
print(num)  
print(res1)

ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@none
میشه بگید چطوری روی دکمه کلیک کنم و بعدش به صفحه بعدی برم


[N] ONE
تخصص : هرچی باشه
@none 3 سال پیش مطرح شد
0

@ftp
😐😐😐
شما یه درخواست post میفرسید که یه response داره دیگه
اون response توی header هاش ادرس url جدید رو داره و داخل body ه میاد rc و rd رو داره که پس از دریافت باید از url استفاده کنید و rcوrdوpass رو ارسال کنید بعد لاگین انجام میشه!
اصلا توی ارسال post کلیدی وجود نداره و نیاز ندارید!
شما ابتدا نیاز دارید با مفهوم request و طرز کار API ها و ساختار سایت ها آشنابشید!


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
1

@none
خوب مشکل من همینه الان من این کد رو میزنم دوباره همون صفحه رو در خروجی چاپ میکنه در header هم location یا url وجود نداره

from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"netwons@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params)
print(req1.text)
print(req1.headers)

[N] ONE
تخصص : هرچی باشه
@none 3 سال پیش مطرح شد
0

@ftp
چون اصلا درست نیست کاری که انجام دادید!
ابتدا باید یم بار صفحه رو لود کنید و rc و rd رو بگیرید و همراه با email به همون url بفرستید!
بعد تو url ی که بر میگردونه هم همین کارو کنید!


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام