import box
from box import tool
from box import *
import lxml.etree
xmlns = "http://www.ixtens.com/xml/mp/override/R1.1"
xmlns_xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi_schemaLocation = "http://www.ixtens.com/xml/mp/override/R1.1 http://support.ixtens.com/mp/R1.1/product/override.xsd"
NSMAP = {None: xmlns, 'xsi': xmlns_xsi}
new_feed = lxml.etree.Element('feed', nsmap=NSMAP)
new_feed = lxml.etree.Element('feed')
new_feed.set('xmlns', xmlns)
head = lxml.etree.SubElement(new_feed, 'data')
new_feed.set('{http://www.w3.org/2001/XMLSchema-instance}schemaLocation', xsi_schemaLocation)
print(lxml.etree.tostring(new_feed, pretty_print=True, encoding='utf-8', xml_declaration=True))
. assign
/ \
var('a') add
/ \
var('b') number(1)
$cookies = 'my_cookies.txt'; //путь к файлу с куками
$url = 'http://site.com/login.php';
$post = ;//сюда данные POST запроса
$useragent = 'Opera/9.25 (Windows NT 6.0; U; ru)';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
Я использую MultiCurl. Запускаю 100 загрузок, через bash запускается 20 копий скрипта (IPC реализовано через очередь в Redis). 18кссылок отрабатывает за 10 минут (около 30 в секунду). Но скрипт не просто качает, он проводит анализ страницы, перекодирует в требуемую кодировку, строит DOM страницы и через XPath вытягивает нужные данные. При этом каждая копия жрет где-то 50МБ. Схема простая и легко масштабируемая горизонтально.
Кстати, нужно понимать/разделять процесс скачки страницы и её парсинг. Первое может легко и непринужденно делать wget.
Сишные либы дадут в принципе один плюс - экономию ОЗУ (т.е. nelis заблуждается). В остальном больше времени уйдет на взаимодействие с сетью и записи данных в базу.
file_get_contents без задания контекстов использовать категорически нельзя. Ибо 1) это блокируемая функция, 2) не содержит таймаутов.