Прочтите URL-адреса из другого файла и очистите данные - Bash
Я хочу получить URL-адреса из URL.txt, а затем добавить их в конец базового URL-адреса https://www.mcdelivery.com.pk/pk/browse/menu.html
который присутствует в другом файле menu.sh
Файл url.text содержит
?daypartId=1&catId=1
?daypartId=1&catId=2
?daypartId=1&catId=11
?daypartId=1&catId=10
?daypartId=1&catId=6
?daypartId=1&catId=4
?daypartId=1&catId=14
?daypartId=1&catId=5
?daypartId=1&catId=3
?daypartId=1&catId=8
Я хочу добавить URL как https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=11
базовый url + url из файла URL.txt
Я придумал этот код, но проблема в том, что я получаю цену только с первой страницы, и он продолжает повторять значение с той же страницы, пока цикл не закончится.
ARRAY=()
while read -r LINE
do
ARRAY+=("$LINE")
done < URL.txt
for LINE in "${ARRAY[@]}"
do
echo $LINE
curl https://www.mcdelivery.com.pk/pk/browse/menu.html$LINE | grep -o '<span class="starting-price">.*</span>' | sed 's/<[^>]\+>//g' >> price.txt
done
Вывод, который я получаю
Rs 398
Rs 487
Rs 841
Rs 752
Rs 398
Rs 398
Rs 487
Rs 841
Rs 752
....
Я хочу получить цену с каждой страницы и сохранить их в price.txt
2 ответа
#!/bin/bash
curl -sL https://www.mcdelivery.com.pk/pk/browse/menu.html | grep -o '<li class="secondary-menu-item ">.*</li>' | sed 's/href=/\nhref=/g' | \
grep 'href=\"' | \
sed 's/.*href="//g;s/".*//g' > URL.txt
sed -i 's/amp;//' URL.txt
ARRAY=()
while read -r LINE
do
ARRAY+=("$LINE")
done < URL.txt
for LINE in "${ARRAY[@]}"
do
echo $LINE
curl https://www.mcdelivery.com.pk/pk/browse/menu.html"$LINE" | grep -o '<h5 class="product-title">.*</h5>' | sed 's/<[^>]\+>//g' >> name.txt
curl https://www.mcdelivery.com.pk/pk/browse/menu.html"$LINE" | grep -o '<span class="starting-price">.*</span>' | sed 's/<[^>]\+>//g' >> price.txt
done
Это ответ на мой вопрос. Спасибо всем за помощь!!!
Пожалуйста, не используйте регулярные выражения для синтаксического анализа html. Используйте настоящий html-парсер / веб-парсер, например xidel
вместо.
Фактически, Bash-скрипт вообще не нужен.xidel
можете делать все, что хотите.
Разберите html элемента меню "★ Что нового ★" и объедините строку "цена + название продукта":
$ xidel -s "https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=1" -e '
//div[ends-with(@class,"panel-product")]/join(
(.//span[@class="starting-price"],.//h5),
" - "
)
'
Rs 288 - Cappuccino with Milk Chocolate Cookie
Rs 288 - Cappuccino with Double Chocolate Cookie
Rs 288 - Latte with Milk Chocolate Cookie
[...]
Rs 239 - Salted Caramel Shake
Перечислите все пункты меню и URL-адрес соединения строки + заголовок:
$ xidel -s https://www.mcdelivery.com.pk/pk/browse/menu.html -e '
//ul[@class="secondary-menu"]//a/join((resolve-uri(@href),span)," - ")
'
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=12 - Deals
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=1 - ★What's New★
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=2 - Ala carte & Value Meals
[...]
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=8 - Snack Time
Для каждого пункта меню, строкового URL-адреса + заголовка, открытого URL-адреса / синтаксического анализа html и строкового соединения цена + название-продукта:
$ xidel -s https://www.mcdelivery.com.pk/pk/browse/menu.html -e '
//ul[@class="secondary-menu"]//a/(
join((resolve-uri(@href),span)," - "),
doc(@href)//div[ends-with(@class,"panel-product")]/join(
(.//span[@class="starting-price"],.//h5),
" - "
)
)
'
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=12 - Deals
Rs 487 - Grand Chicken Spicy with Drink
Rs 398 - Big Mac + Regular Drink
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=1 - ★What's New★
Rs 288 - Cappuccino with Milk Chocolate Cookie
Rs 288 - Cappuccino with Double Chocolate Cookie
Rs 288 - Latte with Milk Chocolate Cookie
Rs 288 - Latte with Double Chocolate Cookie
Rs 159 - McFizz Guava
Rs 195 - Date Pie
Rs 416 - Spicy McCrispy Deluxe - Regular Meal
Rs 416 - McChicken - Regular Meal
Rs 239 - Curly Fries
Rs 239 - Salted Caramel Shake
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=2 - Ala carte & Value Meals
Rs 257 - Chicken Burger with Cheese
Rs 265 - Value McArabia Chicken
Rs 265 - Mini McRoyale
[...]
https://www.mcdelivery.com.pk/pk/browse/menu.html?daypartId=1&catId=8 - Snack Time
Rs 301 - Spicy Chicken Burger
Rs 301 - 4pcs McNuggets
Rs 301 - Fries & Drink
Rs 150 - Apple Pie with Tea