asm
предназначен для включения собственного кода сборки в исходный код C. Например,
int a = 2;
asm("mov a, 3");
printf("%i", a); // will print 3
Компиляторы имеют разные варианты. __asm__
должен быть синонимом, возможно, с некоторыми различиями в компиляторах.
volatile
означает, что переменная может быть изменена извне (ака не программой C). Например, при программировании микроконтроллера, где адрес памяти 0x0000x1234
отображается на каком-либо интерфейсе устройства (например, при кодировании для GameBoy, к кнопкам / экрану / и т. Д.)
volatile std::uint8_t* const button1 = 0x00001111;
Эти отключенные оптимизаторы компилятора, которые полагаются на *button1
, не меняются, если они не изменяются кодом.
Он также используется в многопоточном программировании (не требуется больше сегодня?), Где переменная может быть изменена другим thread.
inline
- это подсказка для компилятора для «встроенных» вызовов функции.
inline int f(int a) {
return a + 1
}
int a;
int b = f(a);
Это не должно быть скомпилировано в вызов функции f
но в int b = a + 1
. Как будто f
, где макрос. Компиляторы в основном делают эту оптимизацию автоматически в зависимости от использования / содержимого функции. __inline__
в этом примере может иметь более конкретное значение.
Аналогично __attribute__((noinline))
(синтаксис, специфичный для GCC) предотвращает встраивание функции.
У меня была точно такая же проблема. Это совсем не просто, но я наконец нашел отличное решение, используя PyQt4.QtWebKit
.
Вы найдете объяснения на этой странице: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/
Я протестировал его, в настоящее время я использую его, и это здорово!
Его большое преимущество в том, что он может работать на сервере, используя только X, без графической среды.
Посмотрите на crowbar. У меня не было опыта работы с ним, но мне было интересно узнать ответ на ваш вопрос, поэтому я начал гуглить. Хотелось бы знать, сработает ли это для вас.
http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/
Я бы посоветовал использовать Selenium. Он в основном предназначен для тестирования веб-приложений с точки зрения пользователя, но в основном это драйвер FireFox. Я действительно использовал его для этой цели ... хотя я отказывался от динамической веб-страницы AJAX. Пока форма Javascript имеет узнаваемый «якорный текст», по которому Selenium может «щелкнуть», все должно разобраться само.
Надеюсь, что это поможет
Возможно, вы могли бы использовать Selenium Webdriver , который, как мне кажется, имеет привязки к Python. Я думаю, что он в основном используется как инструмент для тестирования веб-сайтов, но я думаю, что его также можно использовать для парсинга.