python скребок изображения, не работает должным образом на bing - PullRequest
2 голосов
/ 12 апреля 2020

Я пытаюсь создать скребок для изображений, я сначала попробовал в Google, но изображение не было удалено, поэтому я попробовал Bing, и это сработало, но есть некоторые проблемы

  1. Ссылки на изображения теряются только небольшое количество того, что отображается в поисковой системе.
  2. Снятые изображения взяты с неизвестной страницы в показанных предварительных просмотрах.
  3. Изображения по умолчанию удаляются в фильтре безопасного режима.

Я хотел удалить все изображения (или некоторые страницы), которые показаны на bing.com/images/search, но вместо этого он делает очень мало.

После проверки я обнаружил, что ссылки на изображения хранятся в классе «thumb» в bing, поэтому я удалил все ссылки, которые имели класс thumb, но, похоже, этого недостаточно.

После просмотра исходного кода были найдены только ссылки на классы большого пальца, которые на самом деле имели .jpg

import requests
from bs4 import BeautifulSoup
import os
import random
from urllib.parse import urljoin


url = "https://www.bing.com"

search = input("enter the search term: ")
r = requests.get(url + "/images/search", params={"q":search})

soup = BeautifulSoup(r.content,"html.parser")

li = soup.find_all("a",class_="thumb")

# getting links from thumb class  

links = [l.get("href") for l in li]


print("{0} results found with the search term: {1}".format(len(links), search))
choice = input("Do You Want To Extract The Images? Y or N ")
dir_name = "Result"

# Creating the Result named directory if it didn't existed
if os.path.isdir(dir_name) == False:
    print("[+] Creating Directory Named '{0}'".format(dir_name))
    os.mkdir(dir_name)

n = 1
if(choice == 'Y' or choice == 'y'):
    for i in links:
        req = requests.get(i)

        #title = links[z].split("/")[-1]
        #there were some issues with the default titles so I instead used names generated by
        #random sequence

        print("[+] Extracting Image #",n)
        with open(("{0}/" + generateRandomSequence() + ".jpg").format(dir_name),"wb") as img:
            img.write(req.content)
        n += 1

  #for generating random sequence
def generateRandomSequence():
    seq = ""
    letters = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
               "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
                ]
    for i in range(0,5):
        seq = seq + random.choice(letters) + str(random.randrange(1,1000))

    return seq

1 Ответ

1 голос
/ 13 апреля 2020

Вот вам записка:

import requests
from bs4 import BeautifulSoup
seartext = input("enter the search term: ")
count = input("Enter the number of images you need:")
adlt = 'off' # can be set to 'moderate'
sear=seartext.strip()
sear=sear.replace(' ','+')
URL='https://bing.com/images/search?q=' + sear + '&safeSearch=' + adlt + '&count=' + count
print(URL)
USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
headers = {"user-agent": USER_AGENT}
resp = requests.get(URL, headers=headers)
results=[]
soup = BeautifulSoup(resp.content, "html.parser")
print(soup)
wow = soup.find_all('a',class_='iusc')
for i in wow:
    try:
        print(eval(i['m'])['murl'])
        print()
    except:
        pass

Здесь , вы найдете параметры запроса для bing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...