<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: František Nesveda</title>
    <description>The latest articles on DEV Community by František Nesveda (@frantiseknesveda).</description>
    <link>https://dev.to/frantiseknesveda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1048640%2F98143b87-5b61-4761-97fa-bed2a4ab684e.jpg</url>
      <title>DEV Community: František Nesveda</title>
      <link>https://dev.to/frantiseknesveda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frantiseknesveda"/>
    <language>en</language>
    <item>
      <title>Apify ❤️ Python: Releasing a Python SDK for Actors</title>
      <dc:creator>František Nesveda</dc:creator>
      <pubDate>Tue, 14 Mar 2023 10:37:49 +0000</pubDate>
      <link>https://dev.to/apify/apify-python-releasing-a-python-sdk-for-actors-3505</link>
      <guid>https://dev.to/apify/apify-python-releasing-a-python-sdk-for-actors-3505</guid>
      <description>&lt;p&gt;Whether you are scraping with BeautifulSoup, Scrapy, Selenium, or Playwright, the Apify Python SDK helps you run your project in the cloud at any scale.&lt;/p&gt;

&lt;p&gt;At Apify, our mission is to empower people to create great web scrapers using the best technologies possible and to run them in the cloud effortlessly. That's why we're thrilled to introduce our new &lt;a href="https://docs.apify.com/sdk/python/?ref=apify" rel="noopener noreferrer"&gt;Apify SDK for Python&lt;/a&gt;, allowing you to write &lt;a href="https://docs.apify.com/platform/actors?ref=apify" rel="noopener noreferrer"&gt;Apify Actors&lt;/a&gt; in Python and tap into the wide range of libraries and tools in the Python ecosystem that make web scraping simple and efficient.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Actor&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Actor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Actor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Actor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push_data&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When combined with the Apify platform, Actors have access to a wide variety of features designed specifically to meet developers web scraping and automation needs. These include on-demand scaling of computing resources, run scheduling and monitoring, data center and residential proxies, as well as the ability to &lt;a href="https://docs.apify.com/platform/actors/publishing?ref=apify" rel="noopener noreferrer"&gt;publish Actors&lt;/a&gt; in Apify Store and even &lt;a href="https://docs.apify.com/academy/get-most-of-actors/monetizing-your-actor?ref=apify" rel="noopener noreferrer"&gt;monetize your code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whether you have a simple scraper using &lt;a href="https://docs.apify.com/sdk/python/docs/guides/beautiful-soup?ref=apify" rel="noopener noreferrer"&gt;BeautifulSoup&lt;/a&gt;, a powerful web spider written with &lt;a href="https://docs.apify.com/sdk/python/docs/guides/scrapy?ref=apify" rel="noopener noreferrer"&gt;Scrapy&lt;/a&gt;, or you use &lt;a href="https://docs.apify.com/sdk/python/docs/guides/selenium?ref=apify" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt; or &lt;a href="https://docs.apify.com/sdk/python/docs/guides/playwright?ref=apify" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; to automate browser interaction, the Apify SDK for Python will help you run your projects in the cloud at any scale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ats8ouqvpgi6ke0eg3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ats8ouqvpgi6ke0eg3y.png" alt="Apify Python" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Actors were designed with the purpose of being used together with the Apify platform. So, to unlock the full potential of Actors, lets create one in Apify Console. This is a fairly straightforward process, and you will only need to &lt;a href="https://console.apify.com/sign-up?ref=apify" rel="noopener noreferrer"&gt;sign up for a free Apify account&lt;/a&gt; to follow along.&lt;/p&gt;

&lt;p&gt;Once youre in Apify Console, and you go to &lt;a href="https://console.apify.com/actors/templates?category=python&amp;amp;ref=apify" rel="noopener noreferrer"&gt;Actors Create New&lt;/a&gt; there, youre presented with a choice of Actor templates:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffl6wuvj5rw4mkp7s254h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffl6wuvj5rw4mkp7s254h.png" alt="Web Scraping Python templates" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have predefined Actor templates for all the major web scraping libraries like Scrapy, BeautifulSoup, Playwright, and Selenium.&lt;/p&gt;

&lt;p&gt;Once you create an Actor from your selected Actor template, you can edit its code to perform the scraping tasks you need, run the Actor, and, if youre happy with it, integrate it with your existing data pipelines and schedule it to scrape data in regular intervals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Actors locally
&lt;/h2&gt;

&lt;p&gt;If you want to create and run Apify Actors directly on your local computer so that you can, for example, track the source code in a version control system, you can do so using the &lt;a href="https://docs.apify.com/cli/?ref=apify" rel="noopener noreferrer"&gt;Apify CLI&lt;/a&gt;, using the command &lt;code&gt;apify create my-python-actor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejceji5ofopsucf5eq7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejceji5ofopsucf5eq7g.png" alt="Apify Python SDK Templates" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you execute that command, youll be presented with the same choice of templates as in Apify Console. Once you choose a template, an Actor will be created for you in the &lt;code&gt;my-python-actor&lt;/code&gt; directory, and all its requirements will be installed in a virtual environment in &lt;code&gt;my-python-actor/.venv&lt;/code&gt;. To run the actor, you can just run &lt;code&gt;cd my-python-actor &amp;amp;&amp;amp; apify run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you run an Actor locally, its output is stored in the &lt;code&gt;storage&lt;/code&gt; folder. There, you can find the contents of the Actors default &lt;a href="https://docs.apify.com/sdk/python/reference/class/Dataset?ref=apify" rel="noopener noreferrer"&gt;dataset&lt;/a&gt;, &lt;a href="https://docs.apify.com/sdk/python/reference/class/KeyValueStore?ref=apify" rel="noopener noreferrer"&gt;key-value store&lt;/a&gt;, and &lt;a href="https://docs.apify.com/sdk/python/reference/class/RequestQueue?ref=apify" rel="noopener noreferrer"&gt;request queue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To push the Actor to Apify Console and run it there, you can use the &lt;code&gt;apify push&lt;/code&gt; command, which will upload the actors source code to the Apify platform and build the actor there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get in touch
&lt;/h2&gt;

&lt;p&gt;Were excited to see what you will create with the Apify SDK for Python. If you find any issues, please report them in the &lt;a href="https://github.com/apify/apify-sdk-python?ref=apify" rel="noopener noreferrer"&gt;SDKs GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://console.apify.com/actors/templates?category=python&amp;amp;ref=apify" rel="noopener noreferrer"&gt;🐍 Try writing an Actor in Python&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And dont forget to join our &lt;a href="https://discord.com/invite/jyEM2PRvMU?ref=apify" rel="noopener noreferrer"&gt;developer community on Discord&lt;/a&gt;. We will be waiting for you there to hear your feedback and help you with any questions that might arise.&lt;/p&gt;

</description>
      <category>python</category>
      <category>webscraping</category>
      <category>webautomation</category>
    </item>
  </channel>
</rss>
