در این مطلب، ویدئو آموزش خراش دادن وب سلنیوم پایتون: نحوه خراش دادن آمازون با پایتون، سلنیوم و سوپ زیبا با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:27:04
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,320 –> 00:00:02,840
در این ویدیو میخواهم وبسایت amazon.com را پاک
2
00:00:02,840 –> 00:00:04,080
3
00:00:04,080 –> 00:00:06,799
کنم و از سلنیوم
4
00:00:06,799 –> 00:00:07,680
وبدرایور
5
00:00:07,680 –> 00:00:11,040
و کتابخانه سوپ زیبا برای انجام آن
6
00:00:11,040 –> 00:00:14,320
استفاده میکنم، میخواهم فقط برای دریافت
7
00:00:14,320 –> 00:00:15,360
کد منبع html
8
00:00:15,360 –> 00:00:18,720
یک صفحه استفاده
9
00:00:18,720 –> 00:00:21,760
کنم.
10
00:00:21,760 –> 00:00:25,439
و تجزیه کننده lxml چون سریعتر
11
00:00:25,439 –> 00:00:28,720
است api بهتری دارد و دقیقتر
12
00:00:28,720 –> 00:00:31,679
از سلنیوم است اول از همه باید
13
00:00:31,679 –> 00:00:32,558
14
00:00:32,558 –> 00:00:36,079
درایور وب را دانلود کنم بنابراین
15
00:00:36,079 –> 00:00:38,160
به وب سایت مستندات selenium python می روم به
16
00:00:38,160 –> 00:00:39,200
17
00:00:39,200 –> 00:00:44,559
درایورهای بخش نصب نیاز
18
00:00:44,559 –> 00:00:49,039
دارم ترجیح می دهم از فایرفاکس استفاده
19
00:00:49,039 –> 00:00:53,280
کنم. من به صفحه github و
20
00:00:53,280 –> 00:00:56,559
در اینجا من در حال دانلود نسخه برای سیستم عاملم هستم،
21
00:00:56,559 –> 00:00:59,840
22
00:01:04,640 –> 00:01:08,720
اکنون باید
23
00:01:08,720 –> 00:01:12,080
این آرشیو را در پوشه ای
24
00:01:12,080 –> 00:01:16,080
که اسکریپت من در آن قرار دارد کپی کنم،
25
00:01:18,720 –> 00:01:22,560
آن را در اینجا بسته بندی کنم
26
00:01:22,560 –> 00:01:27,280
و درایور gecko را دارم و اکنون بیایید
27
00:01:27,280 –> 00:01:31,759
یک پایتون ایجاد کنیم. اسکریپت اصلی py
28
00:01:31,759 –> 00:01:36,000
و همچنین باید
29
00:01:37,840 –> 00:01:41,280
نصب کنم، محیط مجازی خود را فعال می کنم
30
00:01:41,280 –> 00:01:44,079
و اکنون باید
31
00:01:44,079 –> 00:01:45,200
32
00:01:45,200 –> 00:01:55,520
کتابخانه های سوپ زیبای سلنیوم و الکسا میلی لیتر را نصب کنم
33
00:01:55,520 –> 00:01:57,680
و نمونه ای از
34
00:01:57,680 –> 00:01:58,640
35
00:01:58,640 –> 00:02:01,520
درایور وب f را ایجاد کنم. کلاس irefox در مورد من
36
00:02:01,520 –> 00:02:03,520
37
00:02:03,520 –> 00:02:06,719
باید مسیر فایل geckodriver را به روش init منتقل کنم
38
00:02:06,719 –> 00:02:08,720
و برای بدست آوردن مسیر مطلق
39
00:02:08,720 –> 00:02:11,120
فایل درایور gecko می خواهم از
40
00:02:11,120 –> 00:02:16,160
کتابخانه path lib استفاده کنم بنابراین از
41
00:02:16,319 –> 00:02:19,599
کلاس path نیاز دارم
42
00:02:19,599 –> 00:02:21,840
سپس بیایید جهانی را تعریف کنیم. متغیر
43
00:02:21,840 –> 00:02:22,959
فرض کنید
44
00:02:22,959 –> 00:02:26,480
مسیر راننده
45
00:02:29,680 –> 00:02:32,959
و نمونهای از کلاس مسیر خواهد
46
00:02:32,959 –> 00:02:35,840
بود که نام فایل را به عنوان
47
00:02:35,840 –> 00:02:36,640
آرگومان میگیرد،
48
00:02:36,640 –> 00:02:41,200
بنابراین این فایل را geckodriver میکند
49
00:02:41,440 –> 00:02:44,640
و سپس من
50
00:02:44,640 –> 00:02:48,080
متد حل را فراخوانی میکنم
51
00:02:48,080 –> 00:02:51,840
که مسیر را مطلق میکند و این عبارت
52
00:02:51,840 –> 00:02:52,720
53
00:02:52,720 –> 00:02:55,920
یک عدد را برمیگرداند. نمونه ای از کلاس مسیر posix و
54
00:02:55,920 –> 00:02:59,120
من می خواهم آن را به رشته تبدیل کنم بسیار
55
00:02:59,120 –> 00:03:02,159
خوب
56
00:03:02,159 –> 00:03:04,800
من مسیر را پیدا کردم و اکنون بیایید
57
00:03:04,800 –> 00:03:06,800
یک نمونه از فایرفاکس ایجاد کنیم
58
00:03:06,800 –> 00:03:10,879
و صفحه amazon.com را دریافت کنیم
59
00:03:10,879 –> 00:03:14,480
بنابراین باید
60
00:03:14,480 –> 00:03:19,840
درایور وب را وارد کنم
61
00:03:20,560 –> 00:03:23,599
و همچنین می خواهم این عبارت را برای اسکریپت من یک نقطه شروع ایجاد کنید،
62
00:03:23,599 –> 00:03:27,040
63
00:03:27,840 –> 00:03:31,280
بنابراین اگر بلوک
64
00:03:31,280 –> 00:03:35,280
بررسی می کند که آیا اسکریپت مستقیماً اجرا شده است
65
00:03:35,280 –> 00:03:38,640
یا به مدل دیگری وارد شده
66
00:03:38,640 –> 00:03:39,440
است،
67
00:03:39,440 –> 00:03:43,120
بنابراین اگر مستقیماً اجرا شود تابع main
68
00:03:43,120 –> 00:03:46,000
فراخوانی می شود و در اینجا در
69
00:03:46,000 –> 00:03:46,959
تابع اصلی
70
00:03:46,959 –> 00:03:49,440
i در حال ایجاد نمونه ای از کلاس فایرفاکس هستم
71
00:03:49,440 –> 00:03:51,200
72
00:03:51,200 –> 00:03:55,920
، فرض کنید که مرورگر
73
00:03:55,920 –> 00:03:59,599
webdriver firefox خواهد بود
74
00:03:59,599 –> 00:04:03,040
و اکنون برای استفاده از فایل geckodriver
75
00:04:03,040 –> 00:04:05,680
باید مسیر فایل geckodriver را به عنوان آرگومان مسیر اجرایی به متد init
76
00:04:05,680 –> 00:04:07,120
کلاس فایرفاکس
77
00:04:07,120 –> 00:04:10,319
منتقل کنم.
78
00:04:10,319 –> 00:04:13,599
79
00:04:13,599 –> 00:04:18,000
80
00:04:18,000 –> 00:04:21,120
پارامتر path مقدار متغیر
81
00:04:21,120 –> 00:04:22,240
مسیر راننده را دریافت می
82
00:04:22,240 –> 00:04:26,720
کند و حالا بیایید
83
00:04:26,720 –> 00:04:30,720
صفحه وب amazon.com را دریافت کنیم
84
00:04:30,720 –> 00:04:33,759
که من متد get را فراخوانی می کنم و
85
00:04:33,759 –> 00:04:36,720
آدرس url صفحه را به آن منتقل می کنم
86
00:04:36,720 –> 00:04:39,280
87
00:04:40,240 –> 00:04:43,840
و بیایید آن را آزمایش کنیم
88
00:04:47,600 –> 00:04:51,360
و می بینیم که مرورگر
89
00:04:51,360 –> 00:04:54,840
شروع می شود و صفحه مورد نظر amazon.com را باز می
90
00:04:54,840 –> 00:04:56,800
کند
91
00:04:56,800 –> 00:05:00,000
بسیار خوب پس
92
00:05:00,000 –> 00:05:03,759
بیایید amazon.com را در مرورگر خود باز کنیم
93
00:05:03,759 –> 00:05:07,840
و به عنوان مثال می خواهم از
94
00:05:07,840 –> 00:05:11,039
95
00:05:11,039 –> 00:05:14,320
دوربین های Canon 5d استفاده کنم و
96
00:05:14,320 –> 00:05:19,120
آمازون می گوید که 33 نتیجه
97
00:05:19,120 –> 00:05:22,880
در سه صفحه وجود دارد
98
00:05:22,880 –> 00:05:27,039
و آن را خراش دهید. من می توانم
99
00:05:27,039 –> 00:05:30,400
از url استفاده کنم که در نوار آدرس مرورگرم ظاهر می شود
100
00:05:30,400 –> 00:05:34,240
اما فکر
101
00:05:34,240 –> 00:05:39,039
می کنم استفاده
102
00:05:39,039 –> 00:05:42,720
از آدرس صفحه دوم ایده خوبی باشد زیرا
103
00:05:42,720 –> 00:05:46,560
پارامترهای دریافت صفحه اضافی وجود دارد
104
00:05:46,560 –> 00:05:50,479
که برای مثال مقدار یک صفحه
105
00:05:50,479 –> 00:05:53,520
را دارد. اگر 2 را بر 1 تغییر
106
00:05:53,520 –> 00:05:57,280
دهم، صفحه اول را دریافت خواهم کرد،
107
00:05:57,280 –> 00:06:01,360
بنابراین فکر می کنم از این آدرس اینترنتی استفاده کنم، آن را
108
00:06:01,360 –> 00:06:04,840
کپی کرده
109
00:06:04,840 –> 00:06:09,680
و در اینجا پیست کنم
110
00:06:09,680 –> 00:06:14,800
، پارامتر صفحه برابر با 1 خواهد شد
111
00:06:14,800 –> 00:06:20,080
و دوباره شروع کنیم،
112
00:06:20,080 –> 00:06:23,520
خوب هیچ تغییری نکرده
113
00:06:24,560 –> 00:06:28,479
و کد html آن را دریافت کنیم. صفحه
114
00:06:28,479 –> 00:06:31,600
من باید از صفت منبع صفحه
115
00:06:31,600 –> 00:06:34,319
نمونه فایرفاکس خود استفاده کنم، بنابراین
116
00:06:34,319 –> 00:06:37,680
117
00:06:38,160 –> 00:06:41,360
منبع صفحه متغیر مرورگر و در این ویدیو میخواهم
118
00:06:41,360 –> 00:06:42,080
119
00:06:42,080 –> 00:06:45,360
عناوین و آدرسهای اینترنتی
120
00:06:45,360 –> 00:06:49,599
همه آگهیها را در تمام صفحات موجود برای من حذف
121
00:06:49,599 –> 00:06:53,360
کنم، میخواهم با خراش دادن این دادهها شروع کنم
122
00:06:53,360 –> 00:06:55,919
و سپس من اسکراپر خود را برای دریافت
123
00:06:55,919 –> 00:06:56,720
دادهها از
124
00:06:56,720 –> 00:07:00,400
صفحات دیگر مقیاس میدهم، بنابراین بیایید
125
00:07:00,400 –> 00:07:17,840
به عنوان مثال تبلیغات را در بازرس بررسی
126
00:07:28,880 –> 00:07:32,800
کنیم و میتوانیم ببینیم که هر تبلیغ یک
127
00:07:32,800 –> 00:07:36,560
بلوک کر است با این کلاس طولانی css
128
00:07:36,560 –> 00:07:39,199
، بسیار طولانی است و فکر
129
00:07:39,199 –> 00:07:40,560
میکنم استفاده از آن راحت نیست.
130
00:07:40,560 –> 00:07:44,240
و برای شناسایی بلوک div، اما
131
00:07:44,240 –> 00:07:47,680
یک ویژگی zen نیز وجود دارد،
132
00:07:47,680 –> 00:07:52,000
همانطور که در شناسه کالاهای آمازون است
133
00:07:52,000 –> 00:07:55,199
و همچنین یک
134
00:07:55,199 –> 00:07:58,560
ویژگی نوع جزء داده وجود دارد
135
00:07:58,560 –> 00:08:01,919
که به عنوان مقدار نتیجه جستجو است
136
00:08:01,919 –> 00:08:04,639
و من فکر می کنم که می توانیم با اطمینان فرض کنیم
137
00:08:04,639 –> 00:08:05,280
که
138
00:08:05,280 –> 00:08:08,319
تگ های div با این آتری
139
00:08:08,319 –> 00:08:10,639
butes کارت های نتایج جستجو هستند
140
00:08:10,639 –> 00:08:13,599
و بنابراین من می خواهم آنها را دریافت کنم قدم بعدی من
141
00:08:13,599 –> 00:08:14,479
ایجاد یک
142
00:08:14,479 –> 00:08:18,160
نمونه در زیر کلاس زیبا است
143
00:08:18,160 –> 00:08:26,720
که ابتدا باید وارد
144
00:08:26,720 –> 00:08:29,440
کنم و اینجا در تابع اصلی
145
00:08:29,440 –> 00:08:31,440
یک متغیر جدید ایجاد
146
00:08:31,440 –> 00:08:34,640
می کنم. متغیر سوپ
147
00:08:34,640 –> 00:08:36,719
باشد، نمونه ای از کلاس سوپ زیبا خواهد بود
148
00:08:36,719 –> 00:08:39,279
149
00:08:39,279 –> 00:08:42,640
و اولین آرگومان کد html
150
00:08:42,640 –> 00:08:44,640
صفحه است
151
00:08:44,640 –> 00:08:48,640
که من متغیر html را به آن منتقل می کنم
152
00:08:48,640 –> 00:08:52,480
و آرگومان دوم نام
153
00:08:52,480 –> 00:08:55,680
تجزیه کننده html است که یک رشته است
154
00:08:55,680 –> 00:08:58,720
و می خواهم برای استفاده از کتابخانه lxml
155
00:08:58,720 –> 00:09:01,839
، زیر کلاس زیبا
156
00:09:01,839 –> 00:09:05,920
کد html یک صفحه را تبدیل می کند، این یک
157
00:09:05,920 –> 00:09:09,760
رشته بزرگ به سیستمی از اشیاء پایتون است
158
00:09:09,760 –> 00:09:14,480
و سپس من می خواهم همه div
159
00:09:14,480 –> 00:09:19,440
هایی را که داده ها را در ویژگی دارند
160
00:09:20,640 –> 00:09:25,200
و همچنین ویژگی نوع مولفه
161
00:09:25,200 –> 00:09:28,480
داده را به عنوان جستجو پیدا کنم.
162
00:09:28,480 –> 00:09:32,640
مقدار نتایج بنابراین من از
163
00:09:32,640 –> 00:09:36,160
متغیر soup استفاده می کنم و
164
00:09:36,160 –> 00:09:39,920
روش find all را که به
165
00:09:39,920 –> 00:09:43,440
دنبال def هستم فراخوانی می کنم و
166
00:09:43,440 –> 00:09:46,240
ویژگی های شناسایی او به صورت زیر خواهد بود
167
00:09:46,240 –> 00:09:47,279
168
00:09:47,279 –> 00:09:51,279
که داده ها در باید
169
00:09:51,279 –> 00:09:54,800
ارائه شوند و
170
00:09:54,800 –> 00:09:59,360
ویژگی نوع جزء داده ها
171
00:10:00,959 –> 00:10:04,720
نوع مؤلفه داده
172
00:10:04,720 –> 00:10:07,760
باید مقدار نتیجه جستجو s را داشته
173
00:10:07,760 –> 00:10:11,920
باشد
174
00:10:12,160 –> 00:10:16,560
مانند اینجا به عنوان نتیجه جستجو
175
00:10:16,560 –> 00:10:20,079
و متد find all
176
00:10:20,079 –> 00:10:20,880
فهرستی
177
00:10:20,880 –> 00:10:24,000
از نمونه های کلاس هدف را برمی گرداند،
178
00:10:24,000 –> 00:10:27,360
بنابراین اجازه دهید
179
00:10:27,360 –> 00:10:31,600
طول لیست کارت ها را چاپ کنیم و سپس کارت ها را چاپ کنیم
180
00:10:31,600 –> 00:10:34,640
و
181
00:10:34,640 –> 00:10:39,360
من اسکریپت را اجرا می کنم
182
00:10:40,800 –> 00:10:46,800
خوب است. 22 نتیجه
183
00:10:46,800 –> 00:10:50,399
اما آمازون می گوید که فقط
184
00:10:50,399 –> 00:10:54,000
17 نتیجه در صفحه اول وجود دارد
185
00:10:54,000 –> 00:10:57,120
و من فکر می کنم مشکلی نیست
186
00:10:57,120 –> 00:11:00,800
و فکر می کنم این ناسازگاری
187
00:11:00,800 –> 00:11:03,839
به دلیل تبلیغات حمایت شده است
188
00:11:03,839 –> 00:11:09,120
که در این مقدار گنجانده نشده اند
189
00:11:09,440 –> 00:11:13,279
اکنون اجازه دهید یک تابع جدید تعریف کنیم
190
00:11:13,279 –> 00:11:16,360
که درخواست ها را انجام می دهد. به
191
00:11:16,360 –> 00:11:18,480
وب سایت amazon.com
192
00:11:18,480 –> 00:11:22,240
فرض کنید تابع get html خواهد بود
193
00:11:22,240 –> 00:11:28,399
و اکنون می خواهم
194
00:11:28,399 –> 00:11:31,519
این خطوط را در اینجا کپی کنم
195
00:11:31,600 –> 00:11:36,240
و آرگومان url
196
00:11:36,240 –> 00:11:40,560
متد get را با متغیر url
197
00:11:40,560 –> 00:11:43,920
که می خواهم به عنوان
198
00:11:43,920 –> 00:11:46,640
آرگومان موقعیتی برای آن تعریف کنم جایگزین کنم. تابع get html
199
00:11:46,640 –> 00:11:47,519
200
00:11:47,519 –> 00:11:51,279
و این تابع
201
00:11:51,279 –> 00:11:54,720
کد منبع صفحه را برمی گرداند
202
00:11:54,720 –> 00:11:59,760
من می توانم آن را از اینجا حذف کنم
203
00:11:59,760 –> 00:12:04,079
و URL اولیه
204
00:12:04,079 –> 00:12:07,519
این متغیر html url
205
00:12:07,519 –> 00:12:11,519
خواهد بود که نتیجه تابع get html خواهد بود
206
00:12:11,519 –> 00:12:12,560
207
00:12:12,560 –> 00:12:15,839
و من پاسی هستم متغیر url را وارد کنید،
208
00:12:15,839 –> 00:12:18,320
209
00:12:18,800 –> 00:12:25,839
بیایید دوباره آن را آزمایش کنیم،
210
00:12:25,920 –> 00:12:29,120
خوب هیچ تغییری نکرده است، کار می کند و
211
00:12:29,120 –> 00:12:31,920
اکنون لیست هایی را با همه کارت ها
212
00:12:31,920 –> 00:12:32,639
در صفحه دریافت کرده ام
213
00:12:32,639 –> 00:12:36,560
و اکنون می خواهم عنوان URL
214
00:12:36,560 –> 00:12:39,760
و قیمت هر کارت را دریافت کنم،
215
00:12:39,760 –> 00:12:43,760
پس بیایید دوباره آنها را بررسی کنیم.
216
00:12:48,480 –> 00:12:52,399
میبینیم که عنوان آگهی
217
00:12:52,399 –> 00:12:55,440
تگ h2 است و
218
00:12:55,440 –> 00:12:58,480
بیایید آنها را چاپ کنیم،
219
00:12:58,639 –> 00:13:01,839
من حلقه for را شروع میکنم، جایی که برای
220
00:13:01,839 –> 00:13:04,880
هر متغیر کارتی در
221
00:13:04,880 –> 00:13:08,720
کارتها باقی
222
00:13:08,880 –> 00:13:12,000
میماند و بنابراین در هر تکرار
223