Python, Selenium, এবং Tor Browser দ্বারা চালিত বেনামী ওয়েব স্ক্র্যাপিং সহ কন্টেইনারে একটি GUI যুক্ত করে এবং তথ্য সংগ্রহের মাত্রা বৃদ্ধি করে ডকার নেটওয়ার্কে কালি লিনাক্সের শক্তি আনলক করুন।
একজন DevOps প্রকৌশলী হিসাবে, আমি উভয়ই প্রেরণ করেছি, এবং অন্যান্য ইঞ্জিনিয়ারদের শিপিং করতে সক্ষম করেছি, অনেকগুলি কয়েক হাজার কনটেইনার। আমি কন্টিনিউয়াস ডেলিভারি এবং বিভিন্ন ধরনের অর্কেস্ট্রেশন পদ্ধতি ব্যবহার করি: কুবারনেটস, AWS-এ ল্যাম্বডা কন্টেনার, ইলাস্টিক কম্পিউট ক্লাউড (EC2) এবং ফার্গেট উভয়ের দ্বারা সমর্থিত ইলাস্টিক কন্টেইনার সার্ভিস (ECS)। কনটেইনারগুলি কাস্টম বিল্ড সিস্টেম, স্বয়ংক্রিয় স্থাপনা, দুর্বলতা স্ক্যানিং, গবেষণার উদ্দেশ্য, ডেটা বিশ্লেষণ, মেশিন লার্নিং, লিগ্যাসি সফ্টওয়্যার সংরক্ষণাগার, স্থানীয় উন্নয়ন এবং ওয়েব স্ক্র্যাপিংয়ের জন্য দরকারী।
এই নির্দেশিকায় আমি Xvfb এবং একটি VNC সার্ভার ব্যবহার করে DockerHub থেকে অফিসিয়াল কালি লিনাক্স কন্টেনারে একটি GUI যোগ করার জন্য যে ধাপগুলি দিয়ে গিয়েছিলাম সেগুলি নিয়ে যাব৷ আমি এখানে যে কোডটি আলোচনা করছি তা kalilinux-xvfb ওপেন সোর্স রিপোজিটরিতে প্রকাশিত হয়েছে এবং সাধারণ ব্যবহারের জন্য ডকার হাবে ক্রমাগত বিতরণ করা হয়েছে। অবশেষে, এই সিরিজের পার্ট 2-এ, পাত্রে থাকা সবকিছু পরীক্ষা করা হবে। টর ব্রাউজার ইনস্ট্যান্স স্বয়ংক্রিয় করতে এবং ওয়েব থেকে ডেটা সংগ্রহ করতে আমি একটি কাস্টম পাইথন স্ক্রিপ্ট, পাইটেস্ট এবং সেলেনিয়াম ব্যবহার করব।
একটি কন্টেইনারে কালি লিনাক্স রাখার পিছনে অনুপ্রেরণার অংশ হল কন্টেইনারগুলির জন্য হোস্ট মেশিন দ্বারা তৈরি ব্যক্তিগত নেটওয়ার্ক স্পেসে দৃশ্যমানতা অর্জন করা। ডকার ডেস্কটপ থেকে ডিফল্ট সেটআপ হল একটি NAT নেটওয়ার্ক ব্যবহার করা। যতক্ষণ না পোর্ট(গুলি) হোস্ট মেশিনের সাথে আবদ্ধ থাকে, ডকার রান -p সহ, সেই পরিষেবাটি হোস্ট থেকে অ্যাক্সেসযোগ্য হবে না।
নিম্নলিখিত প্রতিটি সফ্টওয়্যার প্যাকেজের লিঙ্ক সহ এখানে সংক্ষিপ্ত অংশ যোগ করা হয়েছে:
কালি লিনাক্স
ডকার ডেস্কটপ
টর ব্রাউজার
টর ব্রাউজার লঞ্চার
Xvfb
সেলেনিয়াম
আমি ব্যবহার করা সফ্টওয়্যার জন্য অতিরিক্ত লিঙ্ক:
কালি লিনাক্স হল একটি ডেবিয়ান-ভিত্তিক লিনাক্স ডিস্ট্রিবিউশন যার লক্ষ্য উন্নত পেনিট্রেশন টেস্টিং এবং সিকিউরিটি অডিটিং। 1
আমি কালি লিনাক্স বেছে নিয়েছি নিছক পরিমাণ নিরাপত্তা কেন্দ্রীক টুলের জন্য যা উপলব্ধ। কালি লিনাক্স টিম একটি ডকার ইমেজ প্রদান করে যা নিয়মিত আপডেট করা হয়। কালি লিনাক্স ডকার ইমেজের জন্য প্রয়োজনীয় বেশিরভাগ সফ্টওয়্যার উপলব্ধ এবং আমি সেগুলি ইনস্টল করার জন্য প্যাকেজ ম্যানেজার ব্যবহার করব।
ডকার ডেস্কটপ স্থানীয়ভাবে কন্টেইনার চালানোর জন্য একটি কাঠামো। কন্টেইনার হল একটি পুনঃব্যবহারযোগ্য অপারেটিং সিস্টেম ইমেজে প্যাকেজিং অপারেটিং সিস্টেম এবং অ্যাপ্লিকেশন অবস্থার একটি উপায়। অতিরিক্ত সংস্থান ডকার ওয়েবসাইটে উপলব্ধ।
কন্টেইনার এবং ভার্চুয়াল মেশিনে একই রকম রিসোর্স আইসোলেশন এবং বরাদ্দ সুবিধা রয়েছে, কিন্তু ভিন্নভাবে কাজ করে কারণ কন্টেইনারগুলি হার্ডওয়্যারের পরিবর্তে অপারেটিং সিস্টেমকে ভার্চুয়ালাইজ করে। 2
যেহেতু ডকার কন্টেইনারগুলি ভার্চুয়াল মেশিনের চেয়ে বেশি হালকা, তাই আমি আমার বিকাশের প্রচেষ্টায় তাদের খুব বেশি সমর্থন করি। দীর্ঘমেয়াদে, এই অবস্থাটি একটি ছোট পাঠ্য ফাইল হিসাবে সংরক্ষণ করা যেতে পারে এবং গিট এবং অনুরূপ সরঞ্জামগুলির সাথে সময়ের সাথে পরিবর্তনগুলি ট্র্যাক করা অনেক সহজ। একটি টেক্সট ফাইল থেকে আবার একটি ছবি প্রাপ্ত করার ক্ষমতা শক্তিশালী। যাইহোক, সময়ের সাথে সাথে একটি ডকারফাইলের জন্য বেকার হয়ে যাওয়া সম্পূর্ণভাবে সম্ভব এবং পরবর্তী তারিখে তৈরি করতে ব্যর্থ হতে পারে। অন্যান্য অপারেটিং সিস্টেমের মতো, এবং কোড হিসাবে পরিকাঠামো, সবকিছু আপ টু ডেট রাখা গুরুত্বপূর্ণ।
ডকারের বিকল্প একটি ভার্চুয়াল মেশিন, বা একটি বেয়ার মেটাল ইনস্টলেশন ব্যবহার করা হবে। যাইহোক, আমি বিশ্বাস করি কন্টেইনারগুলি ক্ষণস্থায়ী ওয়েব ক্রলার চালানোর জন্য নিখুঁত টেস্টবেড কারণ সেগুলি সরবরাহ করা এবং পরিষ্কার করা সহজ। আমি একটি একক মেশিনে অনেকগুলি কন্টেইনার চালাতে পারি, সমান্তরালভাবে, যা প্রায় তাত্ক্ষণিকভাবে শুরু এবং বন্ধ করা যেতে পারে। তারপর যখনই আমার অতিরিক্ত বিচ্ছিন্নতার প্রয়োজন হয় এই পুরো সেটআপটি ভার্চুয়াল মেশিনের ভিতর থেকেও চালানো যেতে পারে।
অনিয়ন রাউটার (টর) হল কম্পিউটারের একটি বিশ্বব্যাপী নেটওয়ার্ক যা এনক্রিপ্ট করা হপগুলির একটি সিরিজের মাধ্যমে ট্রাফিককে রুট করে। এটি একজন ব্যবহারকারীকে কিছুটা বেনামে ইন্টারনেট ব্রাউজ করার অনুমতি দেয় এবং একজন ব্যবহারকারীকে শুধুমাত্র টর নেটওয়ার্কে উপলব্ধ ওয়েবসাইটগুলি অ্যাক্সেস করার অনুমতি দেয়।
টর ব্রাউজার হল ফায়ারফক্সের একটি ভারী কনফিগার করা সংস্করণ যা গোপনীয়তা এবং নিরাপত্তার উপর ফোকাস করে। এটি বাক্সের বাইরে টর নেটওয়ার্ক ব্যবহার করতে পারে।
টরব্রাউজার-লঞ্চার অনেক লিনাক্স অপারেটিং সিস্টেমে অন্তর্ভুক্ত রয়েছে এবং টর নেটওয়ার্কে একটি ওয়েব ব্রাউজার খুব সহজে শুরু করে দেয়।
সেলেনিয়াম হল ওয়েব ব্রাউজার স্বয়ংক্রিয় করার একটি টুল। আমি এই উদাহরণে পাইথনের সাথে গিয়েছিলাম, কিন্তু অনেক ভাষা এবং সরঞ্জাম উপলব্ধ রয়েছে।
আমি টর নেটওয়ার্কে এই টর ব্রাউজারটিকে স্বয়ংক্রিয় করতে সেলেনিয়াম ব্যবহার করব। আমি লক্ষ্যে তথ্য ভাগাভাগি সীমাবদ্ধ করতে নিরাপত্তা সচেতন ব্রাউজারের বিদ্যমান কনফিগারেশনের সুবিধা নেওয়ার চেষ্টা করছি। আমি তাদের থামিয়ে কন্টেইনার রানটাইম স্টেট পরিষ্কার করতে সক্ষম হব। ফলস্বরূপ ওয়েবড্রাইভার সেশনে টরের মাধ্যমে বিক্রি করা একটি এলোমেলো আইপি ঠিকানা থাকবে, এটি ওয়েব স্ক্র্যাপিংয়ের জন্য একটি অত্যন্ত শক্তিশালী টুল তৈরি করে।
XOrg কম্পোনেন্ট Xvfb X উইন্ডো সিস্টেমে একটি স্ক্রীন অনুকরণ করতে ব্যবহার করা যেতে পারে। আমি তারপর কন্টেইনারে একটি X সার্ভার শুরু করতে এই স্ক্রীনটি ব্যবহার করব। এই ইমুলেশন কৌশলটি বিশেষভাবে দ্রুত নয় এবং গ্রাফিক্স ভারী অ্যাপ্লিকেশনগুলি একটি GPU থেকে উপকৃত হবে।
ডকারফাইলগুলিকে যে কোনও লিনাক্স, ম্যাকওএস বা উইন্ডোজ ডিস্ট্রিবিউশন তৈরি করা উচিত যা ডকার চালাতে পারে। আমি একটি ইন্টেল প্রসেসর ব্যবহার করে ডকার ডেস্কটপে এটি পরীক্ষা করেছি। অফিসিয়াল কালিলিনক্স বেস কন্টেইনারের জন্য একটি এআরএম বৈকল্পিক রয়েছে। আমি যে কারো কাছ থেকে প্রতিক্রিয়ার প্রশংসা করব যে এটি এআরএম এ চালানোর চেষ্টা করে।
এটি সেই ডকারফাইল যা আমি বেস ইমেজ তৈরি করতে ব্যবহার করেছি। প্রতিটি লাইন কি করে তা ব্যাখ্যা করার জন্য আমি কয়েকটি মন্তব্য যোগ করেছি।
# From the official Kali Linux Docker image rolling release FROM kalilinux/kali-rolling # Leaving this here for now, but it's not needed ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # Install the packages we need # Got lucky with this one, there was a ticket about this: # https://github.com/dnschneid/crouton/issues/4461 `xfce4 dbus-launch not found` in this version of the image so installing dbus-x11 RUN apt-get update -y -q \ && apt-get install -y -q xvfb xfce4 xfce4-goodies tightvncserver net-tools curl openssh-server dbus-x11 # This line copies the shell scripts from the local directory to the container, and makes them executable. COPY *.sh /opt/ RUN chmod 755 /opt/*.sh # This line runs the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
X সার্ভার শুরু করতে সাহায্য করে। আমি X সার্ভার শুরু করতে Xvfb কমান্ড ব্যবহার করছি। যদি একটি পিআইডি উপস্থিত থাকে, এবং যখন এক্স সার্ভারে কিছু ভুল হয়, আমি প্রক্রিয়াটি মেরে ফেলতে পারি এবং আবার শুরু করতে পারি। আমি নেটওয়ার্ক থেকে এক্স সেশনগুলি ব্লক করার সাথে পরীক্ষা করেছি, যদিও এটি অপ্রয়োজনীয় হতে পারে, তবুও আমি এখনও এটি যোগ করছি: -সুপার ব্যবহারকারীর উপর টিসিপি আলোচনা nolisten
#!/bin/bash FILE=/opt/.x.pid if [[ -f "$FILE" ]]; then echo "$FILE exist" echo "PID: " `cat $FILE` else Xvfb -nolisten tcp $DISPLAY & echo $? > $FILE fi
VNC ক্লায়েন্ট পাঠ্য অনুলিপি এবং পেস্ট করার জন্য আদর্শের চেয়ে কম। অন্যান্য হোস্টকে এটির সাথে সংযোগ করতে সাহায্য করার জন্য ধারকটিতে SSH কী যোগ করে এটি প্রতিকার করা যেতে পারে। এটি কন্টেইনারের সাথে সংযোগ করতে SSH টানেল ব্যবহার করার সম্ভাবনা উন্মুক্ত করে।
নিম্নলিখিত ssh-keygen
কমান্ডটি এই স্ট্যাক এক্সচেঞ্জ নিবন্ধ থেকে উল্লেখ করা হয়েছে
#!/bin/bash # Generate SSH keys ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
যদি আমি এই কীগুলি ব্যবহার করতে যাচ্ছি, আমার ওয়ার্কস্টেশনে আমার ব্যক্তিগত কী দরকার। আমি ডকার থেকে আমার হোস্ট মেশিনে ব্যক্তিগত কী অনুলিপি করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করছি, তবে এটি করার জন্য অনেকগুলি উপায় রয়েছে। স্ট্যাক ওভারফ্লোতে এটির চারপাশে একটি ভাল আলোচনা ছিল।
ps কমান্ড দিয়ে কন্টেইনার আইডি খোঁজা হচ্ছে:
docker ps
cp কমান্ডের সাথে কপি করতে কন্টেইনার আইডি ব্যবহার করে:
# For root docker cp <containerId>:/root/.ssh/id_rsa /target/path/on/host # Otherwise for the user configured in the Dockerfile docker cp <containerId>:/home/username/.ssh/id_rsa /target/path/on/host
এটি কন্টেইনারে অনুলিপি করা প্রয়োজন, কিন্তু টর প্রজেক্ট এখানে প্রদান করে বয়লারপ্লেট কনফিগারেশন থেকে এটি শুধুমাত্র অকমেন্টিত বিভাগ।
# /etc/tor/torrc ## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only ## as a relay, and not make any local application connections yourself. SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections. #SOCKSPort 192.168.0.1:9100 # Bind to this address:port too. ## Uncomment this to start the process in the background... or use ## --runasdaemon 1 on the command line. This is ignored on Windows; ## see the FAQ entry if you want Tor to run as an NT service. RunAsDaemon 1 ## The port on which Tor will listen for local connections from Tor ## controller applications, as documented in control-spec.txt. ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C CookieAuthentication 1
এই ডকারফাইলটি পূর্ববর্তী ডকারফাইলের উপর তৈরি করে এবং টর ব্রাউজার এবং পাইথনকে মিশ্রণে যুক্ত করে। আমি টর ব্রাউজার ইনস্টল করতে torbrowser-লঞ্চার প্যাকেজ ব্যবহার করছি।
# From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Create a user and add them to the sudo group, sudo still TBD but leaving for now, will not be able to switch users in this container. RUN useradd -s /bin/bash -m username \ && usermod -aG sudo username # Install python packages RUN pip3 install selenium pytest COPY torrc /etc/tor/torrc # Set the user and home directory for the container USER username ENV USER=username ENV HOME=/home/username # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
ঠিক আগের মতই কিন্তু কম কনফিগারেশন সহ। রুট ব্যবহারকারী ব্যবহার করবে।
# From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Install python packages RUN pip3 install selenium pytest # Copy the tor config file into the containera COPY torrc /etc/tor/torrc # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash
গিথুব অ্যাকশন ওয়ার্কফ্লো ফাইলটি ডকার ইমেজ তৈরি করে এবং এটিকে ডকার হাবে ঠেলে দেয়। এটি ডকারের ডকুমেন্টেশন থেকে স্টক ওয়ার্কফ্লো, অতিরিক্ত ট্যাগ পুশ করা হচ্ছে। আমি দিনে একবার এই ক্রিয়াটি ট্রিগার করার জন্য একটিসময়সূচী যোগ করেছি।
name: docker build and push on: push: branches: - "main" schedule: - cron: '20 16 * * *' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push base image uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:latest - name: Build and push torbrowser root image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser-root.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser-root - name: Build and push torbrowser image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser
এখন আমি পাত্রে পরীক্ষা করতে পারি এবং দেখতে পারি যে তারা কাজ করে কিনা। আমি এই উদাহরণের জন্য torbrowser
ট্যাগ ব্যবহার করতে যাচ্ছি।
docker build
কমান্ড সম্পর্কে আরও তথ্যের জন্য ডকার সিএলআই বিল্ড ডকুমেন্টেশন দেখুন। স্থানীয়ভাবে পাত্র তৈরি করতে আমি নিম্নলিখিত কমান্ডগুলি ব্যবহার করি, অন্যথায় পরবর্তী পদক্ষেপের সময় চাহিদা অনুযায়ী সেগুলি ডকার হাব থেকে টেনে নেওয়া যেতে পারে।
docker build -t excitingtheory/kalilinux-xvfb . docker build -t excitingtheory/kalilinux:torbrowser -f TorBrowser.Dockerfile . docker build -t excitingtheory/kalilinux:torbrowser-root -f TorBrowser-root.Dockerfile .
আমাকে কন্টেইনারে একটি ভলিউম মাউন্ট করতে হবে যাতে আমি যে ফাইলগুলিতে কাজ করছি তা অ্যাক্সেস করতে পারি। আমি ভলিউম হিসাবে ${HOME}/src
ডিরেক্টরি ব্যবহার করছি।
আমরা যে পতাকাগুলি ব্যবহার করছি তার কিছু সংক্ষিপ্ত নোট নীচে অন্তর্ভুক্ত করা হয়েছে, অন্যথায় docker run
কমান্ড সম্পর্কে আরও তথ্যের জন্য ডকার সিএলআই রান ডকুমেন্টেশন দেখুন।
-it
ইন্টারেক্টিভ মোডে ধারক চালানোর জন্য ব্যবহৃত হয়।
--rm
এটি প্রস্থান করার সময় ধারক স্তর অপসারণ করতে ব্যবহৃত হয়।
-p
কনটেইনার থেকে হোস্ট মেশিনে পোর্ট ম্যাপ করতে ব্যবহৃত হয়।
হোস্ট মেশিন থেকে কন্টেইনারে ভলিউম মাউন্ট করতে -v
ব্যবহার করা হয়।
# Run the base container docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb # Run the container with the default user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser # Run the container with the root user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser-root
এরপরে আমি ব্যবহারকারীর ধারকটি খুলতে চাই, VNC-এর মাধ্যমে লগইন করতে চাই এবং এখনও পর্যন্ত সবকিছু কাজ করছে কিনা তা যাচাই করতে Tor Browser Launcher চালাতে চাই। টর ব্রাউজার লঞ্চার রুট ব্যবহারকারীর সাথে কাজ করবে না।
ডিফল্ট ব্যবহারকারীর সাথে ধারকটি শুরু করুন:
docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser
কনটেইনারে ভিএনসি সার্ভার শুরু করে, সার্ভার প্রধান পাসওয়ার্ডের জন্য অনুরোধ করবে, আমি একটি অতিরিক্ত শুধুমাত্র-দর্শন পাসওয়ার্ড সেট করছি।
/opt/start-vnc-server-once.sh
নীচে আউটপুট একটি উদাহরণ.
সার্ভারের সাথে সংযোগ ডায়ালগ ফাইন্ডার মেনু থেকে পাওয়া যাবে: Go
-> Connect to Server
।
একবার ডায়ালগ ওপেন হলে vnc://localhost:5901
ঠিকানা লিখুন এবং Connect
এ ক্লিক করুন। সহজে প্রবেশের জন্য আমি এই ঠিকানাটিকে একটি প্রিয় হিসাবে সংরক্ষণ করেছি।
একটি vnc ক্লায়েন্ট যেমন TightVNC localhost:5901
এ এর সাথে সংযোগ করতে পারে।
একবার সংযুক্ত হলে, আমি xfce4 ডেস্কটপ দেখতে পাচ্ছি।
এখন আমি ভিএনসি সেশনে টার্মিনাল থেকে টর ব্রাউজার লঞ্চার শুরু করতে পারি।
torbrowser-launcher
ব্রাউজারটি খোলা হয়ে গেলে, আমি টর প্রজেক্ট কানেকশন চেকারে গিয়ে এটি কাজ করছে কিনা তা দেখতে পারি
এটি হল অপারেটিং সিস্টেম সেটআপ যা আমি সেলেনিয়াম এবং পাইথনের সাথে কাজ শুরু করার আগে শেষ করতে চেয়েছিলাম। সংক্ষেপে, আমি নিম্নলিখিত কাজ করেছি:
এখন যেখানে কাজ করার পরিবেশ আছে। গোপন পাইথন ওয়েব স্ক্র্যাপিংয়ের এই সিরিজের পরবর্তী পোস্টটি দেখুন।