1

Тема: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Давайте створимо парсер, який буде парсити URL 10-ти сторінок з Google по запиту форум програмістів. Результат роботи повинен записуватись в текстовий файл, наприклад log.txt :)
Я почну на Python.

Продовження теми Створення статичної сторінки

2 Востаннє редагувалося Vo_Vik (14.03.2013 21:46:26)

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Що значить парсити? що повинно бути в результаті? Просто 10 url?

3

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Так
Парсити - Відшукати певну інформацію на сайті/сайтах, зазвичай за допомогою регулярок.

4

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Python:

#!/usr/bin/python
# -*- coding: utf-8 -*- 
#date: March 14, 2013

import urllib2
import re
 
def top10(query = 'форум%20програмістів'):

    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22'
    headers = { 'User-Agent' : user_agent }
    url = 'http://www.google.com.ua/search?hl=uk&q=' + query
    req = urllib2.Request(url, headers = headers)
    response = urllib2.urlopen(req)
    html = response.read()
    expression = r'<h3 class="r"><a href="([^"]*)"'
    
    matches = re.findall(expression, html)
    if matches:
        f = open('log.txt', 'w')
        for match in matches:
               f.write(match + "\n")
   
def main():
    top10()
   
if __name__ == '__main__':
    main()

log.txt:

http://replace.org.ua/
http://www.programmersforum.ru/
http://tereveni.org/topic/28361/
http://student-lamer.at.ua/forum/
http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1344775624
http://sf.nung.edu.ua/lofiversion/index.php/t948.html
http://forum.finance.ua/topic123803.html
http://forum.finance.ua/topic124561.html
http://forum.tntu.edu.ua/index.php?s=886928b002fe4ce3663ce4e6aff21c38&amp;showtopic=10147
http://ce.lviv.ua/catalog/?section_id=34&amp;obj=site&amp;id=38938
Подякували: Vo_Vik1

5

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

php:

function top10($query = 'форум%20програмістів') {
    
    $user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22';
    $url = 'http://www.google.com.ua/search?hl=uk&q=' . $query;
    $data = file_get_contents($url);
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    curl_close($ch);
    
    $pattern = '#<h3 class="r"><a href="([^"]*)"#';
    preg_match_all($pattern, $data, $matches);
    $matches = $matches[1];
    
    $handle = fopen('log.txt', 'w');
    
    foreach ($matches as $match) {
        fwrite($handle, $match . "\n");
    }
    
    fclose($handle);

}

top10();
Подякували: miroslav.chandler1

6

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Java:

import java.net.*;
import java.io.*;
import java.util.regex.*;

public class Parser {

    public static void main(String args[]) {
        top10("форум%20програмістів");
    }
    
    private static void top10(String query) {
        try {
        
            URL url = new URL("http://www.google.com.ua/search?hl=uk&q=" + query);
            URLConnection hc = url.openConnection();
            hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22");
        
            BufferedReader in = new BufferedReader(new InputStreamReader(hc.getInputStream()));
            String inputLine, html = "";
            while ((inputLine = in.readLine()) != null) 
                html += inputLine;
            in.close();
            
            
            Pattern pattern = Pattern.compile("<h3 class=\"r\"><a href=\"([^\"]*)\"");
            Matcher matcher = pattern.matcher(html);
            
            BufferedWriter log = new BufferedWriter(new FileWriter(new File("log.txt")));
            
            while (matcher.find()) {
                log.write(matcher.group(1) + "\n");
            }
            
            log.close();
            
            
        } catch (IOException e) {
            System.out.println(e.toString());
        }
    }

}

7 Востаннє редагувалося Vo_Vik (15.03.2013 22:24:35)

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Супер, доречі, в php як і в java, можна зробити через лог файл.
Маю наувазі error_log(), але то буде вже трохи збочення)

8

Re: Простенький парсер видачі Google (top 10) : PHP & Python & Java

Сильно не вдумуючись переписав варіант java на с#

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string url = @"http://www.google.com.ua/search?hl=uk&q=форум%20програмістів";
            string response;
            using (var wb = new WebClient())
            {
                wb.Headers["User-Agent"] =
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
                response = wb.DownloadString(url);
            }
            var regex = new Regex("<h3 class=\"r\"><a href=\"([^\"]*)\"");
            var matches = regex.Matches(response);
            using (TextWriter tw = File.CreateText("log.txt"))
            {
                foreach (Match match in matches)
                    tw.WriteLine(match.Groups[1]);
            }
            Console.WriteLine("Done");
            Console.ReadKey();
        }
    }
}

Все тепер можна з чистою душею йти спати :)

Подякували: Replace1