помочь с сценарием оболочки Linux, используя Wget и Sed - PullRequest
1 голос
/ 28 января 2011

привет, может ли кто-нибудь помочь мне с настройкой сценария оболочки, который выполняет следующие действия:

  1. wget to http://site.com/xap/wp7?p=1
  2. просмотреть html извлечь все ProductName из заголовка= "Бесплатная доставка ProductName"> ... ex: title = "Бесплатная доставка HD7-Case001">, извлечен HD7-Case001.
  3. вывод в products.txt
  4. , затем выполните цикл попроцесс с шагом 1. url http://site.com/xap/wp7?p=1 где «1» - номер страницы до номера 50. Пример. http: //..wp7? P = 1 , http: //..wp7? P = 2 , http: //..wp7? P = 3

Я провел собственное исследование и сам написал много кода ... определенно, мне нужно гораздо больше работы

#! /bin/sh
... 

while read page; do
wget -q -O- "http://site.com/xap/wp7?p=$page" | 
sed ...

done < "products.txt"

Ответы [ 2 ]

1 голос
/ 28 января 2011
#/bin/bash

for page in {1..50}
do
  wget -q "http://site.com/xap/wp7?p=$page" -O - \
    | tr '"' '\n' | grep "^Free Shipping " | cut -d ' ' -f 3 > products.txt
done

tr превращает каждую двойную кавычку в новую строку, поэтому вывод tr будет выглядеть примерно так:

<html>
...
... <tag title=
Free Shipping [Product]
> ...

По сути, это способ поместить каждый Продукт в отдельную линию.

Затем grep пытается отбросить все остальные строки, кроме тех, которые начинаются с бесплатной доставки, поэтому его вывод должен выглядеть следующим образом:

Free Shipping [Product1]
Free Shipping [Product2]
...

Затем cut извлекает третий «столбец» (разделенный пробелами), поэтому на выходе должно быть:

[Product1]
[Product2]
...
1 голос
/ 28 января 2011

вы можете комбинировать с PHP для разбора XML

сценарий wget bash

#/bin/bash

for page in {1..50}
do
  wget -q -O /tmp/$page.xml "http://site.com/xap/wp7?p=$page"
  php -q xml.php $page >> products.txt
done

xml.php

<?
$file = '/tmp/'.$argv[1].'.xml';
// assumeing the following format
//<Products><Product title="Free Shipping ProductName"/></Products>

$xml = simplexml_load_file($file);
echo $xml->Product->attributes()->title;
/* you can make any replacement only parse/obtain the correct node attribute */
?>

Неотличная идея, но PHP simplexml предоставляют простой способ разбора xml.
надеюсь, что это может быть идеей для начала

...