2011-12-19 6 views
0

안녕 얘들 아 나는 구글에서 URL을하려고했지만 반환 0 URL이야!Google 검색어에서 URL을 가져 오는 방법은 무엇입니까?

이것은 내 코드가 무엇입니까?

import string, sys, time, urllib2, cookielib, re, random, threading, socket, os, time 
def Search(go_inurl,maxc): 
    header = ['Mozilla/4.0 (compatible; MSIE 5.0; SunOS 5.10 sun4u; X11)', 
      'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.2pre) Gecko/20100207 Ubuntu/9.04 (jaunty) Namoroka/3.6.2pre', 
      'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser;', 
     'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)', 
     'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1)', 
     'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6)', 
     'Microsoft Internet Explorer/4.0b1 (Windows 95)', 
     'Opera/8.00 (Windows NT 5.1; U; en)', 
     'amaya/9.51 libwww/5.4.0', 
     'Mozilla/4.0 (compatible; MSIE 5.0; AOL 4.0; Windows 95; c_athome)', 
     'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 
     'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)', 
     'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ZoomSpider.net bot; .NET CLR 1.1.4322)', 
     'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0 [email protected])', 
     'Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]'] 
    gnum=100 
    uRLS = [] 
    counter = 0 
     while counter < int(maxc): 
       jar = cookielib.FileCookieJar("cookies") 
       query = 'q='+go_inurl 
       results_web = 'http://www.google.com/cse?'+'cx=011507635586417398641%3Aighy9va8vxw&ie=UTF-8&'+'&'+query+'&num='+str(gnum)+'&hl=en&lr=&ie=UTF-8&start=' + repr(counter) + '&sa=N' 
       request_web = urllib2.Request(results_web) 
     agent = random.choice(header) 
       request_web.add_header('User-Agent', agent) 
     opener_web = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 
       text = opener_web.open(request_web).read() 
     strreg = re.compile('(?<=href=")(.*?)(?=")') 
       names = strreg.findall(text) 
     counter += 100 
       for name in names: 
         if name not in uRLS: 
           if re.search(r'\(', name) or re.search("<", name) or re.search("\A/", name) or re.search("\A(http://)\d", name): 
             pass 
       elif re.search("google", name) or re.search("youtube", name) or re.search(".gov", name) or re.search("%", name): 
             pass 
       else: 
             uRLS.append(name) 
    tmpList = []; finalList = [] 
     for entry in uRLS: 
     try: 
      t2host = entry.split("/",3) 
      domain = t2host[2] 
      if domain not in tmpList and "=" in entry: 
       finalList.append(entry) 
       tmpList.append(domain) 
     except: 
      pass 
    print "[+] URLS (sorted) :", len(finalList) 
    return finalList 

편집을 많이 했는데도 아무 일도 일어나지 않았습니다! 내 실수는 무엇인지 보여주세요. 고마워요.

+0

들여 쓰기를 수정하십시오. 완전히 무작위로 보인다. –

답변

0

두 가지 문제점은이 부분에서 볼 수 있습니다. 첫째, (분명히) google.com의 결과 만 표시하는 맞춤 Google 검색을 사용하고 있습니다. 이것은 URL (re.search("google", name))에서 "google"의 발생을 찾는 정규 표현식과 결합되어 발견되면 이 아닌이 URL 목록에 추가되면이 사용자 정의 검색에서는 항상 공백으로 남게됩니다.

더 중요하게도 논리가 올바르지 않습니다. 고정 된 형식으로, 당신은 현재이 수행

if name not in uRLS: 
    if re.search(r'\(', name) or re.search("<", name) or re.search("\A/", name) or re.search("\A(http://)\d", name): 
     pass 
    elif re.search("google", name) or re.search("youtube", name) or re.search(".gov", name) or re.search("%", name): 
     pass 
    else: 
     uRLS.append(name) 

합니다 (elifelse 훨씬에 한 번 들여 쓰기 수 있지만 여전히 문제가 지속 않습니다.)

name가 아닌 경우 확인하기 때문에 uRLS에서 추가 논리가 else 경로에 있으므로이 목록에 name이 추가되지 않습니다.

else을 제거, 그것을 해결하려면 append 문의 들여 쓰기를 감소하고, continue으로 pass 문을 교체하십시오.

+0

그래서 내가 뭘 해야할지? –

+1

1. 사용자 정의 검색은 "google"이 포함 된 url 만 반환하므로 're.search ("google", name)'검사는 항상'True '를 반환합니다.이 함수 호출을 제거하십시오. --- 2. 내가 게시 한 발췌 문장에서'else'로 줄을 제거하고'uRLS.append (name)'줄 앞에있는 4 칸을 제거하십시오. – jro

0

jro가 맞습니다. 또한 Google은 결과 형식을 매월이 아니라 일년에 한 번 이상 주기적으로 변경하므로 정규식이 실패하고 수정해야 할 수 있습니다.

내가 과거에 당신보다 유사한 문제에 직면하고 나는 쉬운 솔루션을 선택,이 사람들은이 위대한 작품을 google scraper to extract all URLs from search results, 당신은 키워드를 제공하고 그들이 긁어 제공하고 Google 결과를 구문 분석하고 당신에게 링크를 반환 앵커 (anchor), 설명 (description) 등이 있습니다. 이것은 솔루션에 대한 다른 접근 방법이지만, 도움이 될 수도 있습니다.

관련 문제