Почему я могу модифицировать свой веб-сканер с помощью Python3, чтобы он возвращал не только пару изображений и несколько дубликатов из reddit? - PullRequest
0 голосов
/ 18 февраля 2019

Когда этот код запускается, он может возвращать 6 изображений , включая дубликаты, это действительно сбивает с толку, и я хочу знать, как я могу изменить свой код, чтобы найти топ-30 постов (или что-то в этом роде) из r /dankmemes или / me_irl за исключением дубликатов.

Код:

from bs4 import BeautifulSoup
import requests
import re
import urllib.request
import urllib3
import os
import json

http = urllib3.PoolManager()

url = "https://old.reddit.com/r/me_irl"
response = http.request('GET', url)
soup = BeautifulSoup(response.data, "lxml")
tags = soup.find_all('a', href=True)

hrefs = [ ele['href'] for ele in tags if '.jpg' in ele['href']]
print(hrefs)


save_path = '/Users/eucar/Desktop/FirstImages'
ogname = "image_links.json"
completename = os.path.join(save_path, ogname)
with open(completename, "w") as output:
    json.dump(hrefs, output)

import urllib.request as req



with open('/Users/eucar/Desktop/FirstImages/image_links.json') as images:
    images = json.load(images)
    for idx, image_url in enumerate(images):
        try :
            image_url = image_url.strip()
            file_name = '/Users/eucar/Desktop/Instagrammemes/{}.{}'.format(idx, image_url.strip().split('.')[-1])
            print('About to download {} to file {}'.format(image_url, file_name))
            req.urlretrieve(image_url, file_name)
        except :
            print("All done")

1 Ответ

0 голосов
/ 18 февраля 2019

Вот часть получения этих ссылок.

from bs4 import BeautifulSoup
import requests
import json

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

url = "https://www.reddit.com/r/dankmemes"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

scripts = soup.find_all('script')
jsonObj = None

for script in scripts:
    if 'window.___r = ' in script.text:
        jsonStr = script.text.strip()
        
        jsonStr = jsonStr.split('window.___r = ')[1]
        jsonStr = jsonStr.split('; window.___prefetches')[0]
        
        jsonObj = json.loads(jsonStr)

# As list comprehension
media_links = [ jsonObj['posts']['models'][alpha]['media']['content'] for alpha in jsonObj['posts']['models'] if jsonObj['posts']['models'][alpha]['domain'] == 'i.redd.it' ]        
 

# As a for loop
media_links = []
for alpha in jsonObj['posts']['models']:
    if jsonObj['posts']['models'][alpha]['domain'] == 'i.redd.it':
        media_links.append(jsonObj['posts']['models'][alpha]['media']['content'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...