Hello :D
I love the memes and I want to keep them in my phone, I think the solution is to browse through the meme and download it manually?
nope let's steal/download some memes automatic with python
what the website we will steal memes from it 🎯 ?
our target is https://imgflip.com/
first let's look at html page
<div class="name">
BLA BLAB
BLAB LBA
BL BLA
<img src="MEME URL">
all memes links in <div class="base-img-wrap">.......</div>
here we need to parse div tag with base-img-wrap
class name and get <img>
tag in this div
<div class='base-img-wrap'>
BLA BLA LBA
<img src="MEME LINK">
</div>
Modules we need
- requests (for http/s requests)
- bs4 (html parsing)
let's start our work with send http request to this site and parsing base-img-wrap
class
import requests
from bs4 import BeautifulSoup
req = requests.get('https://imgflip.com/?page=1').content
soup = BeautifulSoup(req, "html.parser")
ancher = soup.find_all('div', {'class': "base-unit clearfix"})
"""
<div class="base-unit clearfix"><h2 class="base-unit-title"><a href="/i/5aq7jq">Why is my sister's name Rose</a></h2><div class="base-img-wrap-wrap"><div class="base-img-wrap" style="width:440px"><a class="base-img-link" href="/i/5aq7jq" style="padding-bottom:105.90909090909%"> ......
"""
We have fetched all the data of <div class='base-img-wrap'>
let's get img tag
import requests
from bs4 import BeautifulSoup
r = requests.get('https://imgflip.com/?page=1').content
soup = BeautifulSoup(req, "html.parser")
ancher = soup.find_all('div', {'class': "base-unit clearfix"})
for pt in ancher:
img = pt.find('img', {'class': 'base-img'})
if img:
print(img)
<img alt="Why is my sister's name Rose | people that upvote good memes instead of just scrolling past them | image tagged in why is my sister's name rose | made w/ Imgflip meme maker" class="base-img" src="//i.imgflip.com/5aq7jq.jpg"/>
<img alt="Petition: upvote if you want a rule against upvote begging. I will then post the results in the Imgflip suggestion stream | Upvote begging will keep happening as long as they make it to the front page; UPVOTE BEGGING TO DESTROY UPVOTE BEGGING | image tagged in memes,the scroll of truth,no no hes got a point,you have become the very thing you swore to destroy,memes | made w/ Imgflip meme maker" class="base-img" src="//i.imgflip.com/5aqvx4.jpg"/>
cool , know we have all img tag know we need get src value
import requests
from bs4 import BeautifulSoup
r = requests.get('https://imgflip.com/?page=1').content
soup = BeautifulSoup(req, "html.parser")
ancher = soup.find_all('div', {'class': "base-unit clearfix"})
for pt in ancher:
img = pt.find('img', {'class': 'base-img'})
if img:
link = img['src'].replace(img['src'][0:2],'https://')
print(link)
"""
https://i.imgflip.com/5aq7jq.jpg
https://i.imgflip.com/5aqvx4.jpg
https://i.imgflip.com/5aq5jg.jpg
https://i.imgflip.com/5aor2n.jpg
https://i.imgflip.com/5amt83.jpg
https://i.imgflip.com/5ayodd.jpg
https://i.imgflip.com/5awhgz.jpg
https://i.imgflip.com/5allij.jpg
https://i.imgflip.com/5aosh7.jpg
https://i.imgflip.com/5amxbo.jpg
https://i.imgflip.com/5auvpo.jpg
"""
after get all images we will download it with requests module and save it
import requests
from bs4 import BeautifulSoup
req = requests.get('https://imgflip.com/?page=1').content
soup = BeautifulSoup(req, "html.parser")
ancher = soup.find_all('div', {'class': "base-unit clearfix"})
for pt in ancher:
img = pt.find('img', {'class': 'base-img'})
if img:
link = img['src'].replace(img['src'][0:2],'https://')
r = requests.get(link)
f = open(img['src'].split('/')[3],'wb') # write binary
f.write(r.content)
f.close()
great , we get all the memes of page number 1
let's add parameter for page
in url
import requests
from bs4 import BeautifulSoup
def meme_stealer(page):
req = requests.get(f'https://imgflip.com/?page={page}').content
soup = BeautifulSoup(req, "html.parser")
ancher = soup.find_all('div', {'class': "base-unit clearfix"})
for pt in ancher:
img = pt.find('img', {'class': 'base-img'})
if img:
link = img['src'].replace(img['src'][0:2],'https://')
r = requests.get(link)
f = open(img['src'].split('/')[3],'wb')
f.write(r.content)
f.close()
for i in range(1,6):
meme_stealer(i)
# Page 1
# Page 2
# Page 3
# Page 4
# Page 5
Thanks for reading this
Bye :D
Top comments (1)
Man I loooove beautiful soup.