urllib.error.HTTPError: Ошибка HTTP 503: служба недоступна - веб-сканер - PullRequest
0 голосов
/ 01 ноября 2018

Я очень новичок в переполнении стека и еще новее в программировании. Я сделал этот веб-сканер немного из этого и обнаружил во множестве поисковых запросов. Я собираюсь ввести ключевое слово и найти его в Google, просматривая каждую страницу и возвращая адреса электронной почты в файл CSV. Это сработало только вчера, теперь я получаю эту ошибку 503 ошибка. Может кто-нибудь показать мне, как это преодолеть? Вот мой код.

import logging
import os
import pandas as pd
import re
import scrapy
import time

from scrapy.crawler import CrawlerProcess
from scrapy.linkextractors.lxmlhtml import LxmlLinkExtractor
from googlesearch import search



def get_urls(tag, n, language):
    urls = [url for url in search(tag, stop=n, lang=language)][:n]
    time.sleep(2)
    return urls



class MailSpider(scrapy.Spider):

    name = 'email'

    def parse(self, response):

        links = LxmlLinkExtractor(allow=()).extract_links(response)
        links = [str(link.url) for link in links]
        links.append(str(response.url))

        for link in links:
            yield scrapy.Request(url=link, callback=self.parse_link) 

    def parse_link(self, response):

        for word in self.reject:
            if word in str(response.url):
                return

        html_text = str(response.text)
        mail_list = re.findall('\w+@\w+\.{1}\w+', html_text)

        dic = {'email': mail_list, 'link': str(response.url)}
        df = pd.DataFrame(dic)

        df.to_csv(self.path, mode='a', header=False)
        df.to_csv(self.path, mode='a', header=False)

def ask_user(question):
    response = input(question + ' y/n' + '\n')
    if response == 'y':
        return True
    else:
        return False

def create_file(path):
    response = False
    if os.path.exists(path):
        response = ask_user('File already exists, replace?')
        if response == False: return 

    with open(path, 'wb') as file: 
        file.close()

def get_info(tag, n, language, path, reject=[]):

    create_file(path)
    df = pd.DataFrame(columns=['email', 'link'], index=[0])
    df.to_csv(path, mode='w', header=True)

    print('Collecting Google urls...')
    google_urls = get_urls(tag, n, language)

    print('Searching for emails...')
    process = CrawlerProcess({'USER_AGENT': 'Mozilla/5.0'})
    process.crawl(MailSpider, start_urls=google_urls, path=path, reject=reject)
    process.start()

    print('Cleaning emails...')
    df = pd.read_csv(path, index_col=0)
    df.columns = ['email', 'link']
    df = df.drop_duplicates(subset='email')
    df = df.reset_index(drop=True)
    df.to_csv(path, mode='w', header=True)

    return df

bad_words = ['facebook', 'instagram', 'youtube', 'twitter', 'wiki']
df = get_info(input('What keywords would you like to collect emails for?:'), int(input('How many Websites would you like to crawl?')), 'pt', input('Enter a name for csv file:')+'.csv', reject=bad_words)

df.head()

1 Ответ

0 голосов
/ 01 ноября 2018

Так что я не знаю, имеет ли это значение, но я вошел в свою другую учетную запись Google, и она снова заработала.

...